docs/_static/searchtools.js
function(searchterms, excluded, terms, titleterms) {
    var docnames = this._index.docnames;
    var filenames = this._index.filenames;
    var titles = this._index.titles;

    var i, j, file;
    var fileMap = {};
    var scoreMap = {};
    var results = [];

    // perform the search on the required terms
    for (i = 0; i < searchterms.length; i++) {
      var word = searchterms[i];
      var files = [];
      var _o = [
        {files: terms[word], score: Scorer.term},
        {files: titleterms[word], score: Scorer.title}
      ];

      // no match but word was a required one
      if ($u.every(_o, function(o){return o.files === undefined;})) {
        break;
      }
      // found search word in contents
      $u.each(_o, function(o) {
        var _files = o.files;
        if (_files === undefined)
          return

        if (_files.length === undefined)
          _files = [_files];
        files = files.concat(_files);

        // set score for the word in each file to Scorer.term
        for (j = 0; j < _files.length; j++) {
          file = _files[j];
          if (!(file in scoreMap))
            scoreMap[file] = {}
          scoreMap[file][word] = o.score;
        }
      });

      // create the mapping
      for (j = 0; j < files.length; j++) {
        file = files[j];
        if (file in fileMap)
          fileMap[file].push(word);
        else
          fileMap[file] = [word];
      }
    }

    // now check if the files don't contain excluded terms
    for (file in fileMap) {
      var valid = true;

      // check if all requirements are matched
      if (fileMap[file].length != searchterms.length)
          continue;

      // ensure that none of the excluded terms is in the search result
      for (i = 0; i < excluded.length; i++) {
        if (terms[excluded[i]] == file ||
            titleterms[excluded[i]] == file ||
            $u.contains(terms[excluded[i]] || [], file) ||
            $u.contains(titleterms[excluded[i]] || [], file)) {
          valid = false;
          break;
        }
      }

      // if we have still a valid result we can add it to the result list
      if (valid) {
        // select one (max) score for the file.
        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
      }
    }
    return results;
  }
function(searchterms, excluded, terms, titleterms) {
    var docnames = this._index.docnames;
    var filenames = this._index.filenames;
    var titles = this._index.titles;

    var i, j, file;
    var fileMap = {};
    var scoreMap = {};
    var results = [];

    // perform the search on the required terms
    for (i = 0; i < searchterms.length; i++) {
      var word = searchterms[i];
      var files = [];
      var _o = [
        {files: terms[word], score: Scorer.term},
        {files: titleterms[word], score: Scorer.title}
      ];

      // no match but word was a required one
      if ($u.every(_o, function(o){return o.files === undefined;})) {
        break;
      }
      // found search word in contents
      $u.each(_o, function(o) {
        var _files = o.files;
        if (_files === undefined)
          return

        if (_files.length === undefined)
          _files = [_files];
        files = files.concat(_files);

        // set score for the word in each file to Scorer.term
        for (j = 0; j < _files.length; j++) {
          file = _files[j];
          if (!(file in scoreMap))
            scoreMap[file] = {}
          scoreMap[file][word] = o.score;
        }
      });

      // create the mapping
      for (j = 0; j < files.length; j++) {
        file = files[j];
        if (file in fileMap)
          fileMap[file].push(word);
        else
          fileMap[file] = [word];
      }
    }

    // now check if the files don't contain excluded terms
    for (file in fileMap) {
      var valid = true;

      // check if all requirements are matched
      if (fileMap[file].length != searchterms.length)
          continue;

      // ensure that none of the excluded terms is in the search result
      for (i = 0; i < excluded.length; i++) {
        if (terms[excluded[i]] == file ||
            titleterms[excluded[i]] == file ||
            $u.contains(terms[excluded[i]] || [], file) ||
            $u.contains(titleterms[excluded[i]] || [], file)) {
          valid = false;
          break;
        }
      }

      // if we have still a valid result we can add it to the result list
      if (valid) {
        // select one (max) score for the file.
        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
      }
    }
    return results;
  }
function ( searchterms , excluded , terms , titleterms ) { var docnames = this . _index . docnames ; var filenames = this . _index . filenames ; var titles = this . _index . titles ; var i , j , file ; var fileMap = { } ; var scoreMap = { } ; var results = [ ] ; // perform the search on the required terms for ( i = 0 ; i < searchterms . length ; i ++ ) { var word = searchterms [ i ] ; var files = [ ] ; var _o = [ { files : terms [ word ] , score : Scorer . term } , { files : titleterms [ word ] , score : Scorer . title } ] ; // no match but word was a required one if ( $u . every ( _o , function ( o ) { return o . files === undefined ; } ) ) { break ; } // found search word in contents $u . each ( _o , function ( o ) { var _files = o . files ; if ( _files === undefined ) return if ( _files . length === undefined ) _files = [ _files ] ; files = files . concat ( _files ) ; // set score for the word in each file to Scorer.term for ( j = 0 ; j < _files . length ; j ++ ) { file = _files [ j ] ; if ( ! ( file in scoreMap ) ) scoreMap [ file ] = { } scoreMap [ file ] [ word ] = o . score ; } } ) ; // create the mapping for ( j = 0 ; j < files . length ; j ++ ) { file = files [ j ] ; if ( file in fileMap ) fileMap [ file ] . push ( word ) ; else fileMap [ file ] = [ word ] ; } } // now check if the files don't contain excluded terms for ( file in fileMap ) { var valid = true ; // check if all requirements are matched if ( fileMap [ file ] . length != searchterms . length ) continue ; // ensure that none of the excluded terms is in the search result for ( i = 0 ; i < excluded . length ; i ++ ) { if ( terms [ excluded [ i ] ] == file || titleterms [ excluded [ i ] ] == file || $u . contains ( terms [ excluded [ i ] ] || [ ] , file ) || $u . contains ( titleterms [ excluded [ i ] ] || [ ] , file ) ) { valid = false ; break ; } } // if we have still a valid result we can add it to the result list if ( valid ) { // select one (max) score for the file. // for better ranking, we should calculate ranking by using words statistics like basic tf-idf... var score = $u . max ( $u . map ( fileMap [ file ] , function ( w ) { return scoreMap [ file ] [ w ] } ) ) ; results . push ( [ docnames [ file ] , titles [ file ] , '' , null , score , filenames [ file ] ] ) ; } } return results ; }
search for full-text terms in the index
search for full - text terms in the index