Add multi-query search
This commit is contained in:
parent
fb730d75d4
commit
47a9ffa573
3 changed files with 95 additions and 11 deletions
|
@ -1299,14 +1299,78 @@
|
||||||
printTab(currentTab);
|
printTab(currentTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
function search(e) {
|
function execSearch(query, searchWords) {
|
||||||
var query,
|
var queries = query.raw.split(",");
|
||||||
obj, i, len,
|
var results = {
|
||||||
results = {"in_args": [], "returned": [], "others": []},
|
'in_args': [],
|
||||||
resultIndex;
|
'returned': [],
|
||||||
var params = getQueryStringParams();
|
'others': [],
|
||||||
|
};
|
||||||
|
|
||||||
|
for (var i = 0; i < queries.length; ++i) {
|
||||||
|
var query = queries[i].trim();
|
||||||
|
if (query.length !== 0) {
|
||||||
|
var tmp = execQuery(getQuery(query), searchWords);
|
||||||
|
|
||||||
|
results['in_args'].push(tmp['in_args']);
|
||||||
|
results['returned'].push(tmp['returned']);
|
||||||
|
results['others'].push(tmp['others']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (queries.length > 1) {
|
||||||
|
function getSmallest(arrays, positions) {
|
||||||
|
var start = null;
|
||||||
|
|
||||||
|
for (var it = 0; it < positions.length; ++it) {
|
||||||
|
if (arrays[it].length > positions[it] &&
|
||||||
|
(start === null || start > arrays[it][positions[it]].lev)) {
|
||||||
|
start = arrays[it][positions[it]].lev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
|
||||||
|
function mergeArrays(arrays) {
|
||||||
|
var ret = [];
|
||||||
|
var positions = [];
|
||||||
|
|
||||||
|
for (var x = 0; x < arrays.length; ++x) {
|
||||||
|
positions.push(0);
|
||||||
|
}
|
||||||
|
while (ret.length < MAX_RESULTS) {
|
||||||
|
var smallest = getSmallest(arrays, positions);
|
||||||
|
if (smallest === null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (x = 0; x < arrays.length && ret.length < MAX_RESULTS; ++x) {
|
||||||
|
if (arrays[x].length > positions[x] &&
|
||||||
|
arrays[x][positions[x]].lev === smallest) {
|
||||||
|
ret.push(arrays[x][positions[x]]);
|
||||||
|
positions[x] += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'in_args': mergeArrays(results['in_args']),
|
||||||
|
'returned': mergeArrays(results['returned']),
|
||||||
|
'others': mergeArrays(results['others']),
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
'in_args': results['in_args'][0],
|
||||||
|
'returned': results['returned'][0],
|
||||||
|
'others': results['others'][0],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function search(e) {
|
||||||
|
var params = getQueryStringParams();
|
||||||
|
var query = getQuery(document.getElementsByClassName('search-input')[0].value);
|
||||||
|
|
||||||
query = getQuery(document.getElementsByClassName('search-input')[0].value);
|
|
||||||
if (e) {
|
if (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
|
@ -1328,8 +1392,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
results = execQuery(query, index);
|
showResults(execSearch(query, index));
|
||||||
showResults(results);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildIndex(rawSearchIndex) {
|
function buildIndex(rawSearchIndex) {
|
||||||
|
|
20
src/test/rustdoc-js/multi-query.js
Normal file
20
src/test/rustdoc-js/multi-query.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
const QUERY = 'str,u8';
|
||||||
|
|
||||||
|
const EXPECTED = {
|
||||||
|
'others': [
|
||||||
|
{ 'path': 'std', 'name': 'str' },
|
||||||
|
{ 'path': 'std', 'name': 'u8' },
|
||||||
|
{ 'path': 'std::ffi', 'name': 'CStr' },
|
||||||
|
{ 'path': 'std::simd', 'name': 'u8x2' },
|
||||||
|
],
|
||||||
|
};
|
|
@ -157,7 +157,8 @@ function main(argv) {
|
||||||
// execQuery first parameter is built in getQuery (which takes in the search input).
|
// execQuery first parameter is built in getQuery (which takes in the search input).
|
||||||
// execQuery last parameter is built in buildIndex.
|
// execQuery last parameter is built in buildIndex.
|
||||||
// buildIndex requires the hashmap from search-index.
|
// buildIndex requires the hashmap from search-index.
|
||||||
var functionsToLoad = ["levenshtein", "validateResult", "getQuery", "buildIndex", "execQuery"];
|
var functionsToLoad = ["levenshtein", "validateResult", "getQuery", "buildIndex", "execQuery",
|
||||||
|
"execSearch"];
|
||||||
|
|
||||||
finalJS += 'window = { "currentCrate": "std" };\n';
|
finalJS += 'window = { "currentCrate": "std" };\n';
|
||||||
finalJS += loadThings(arraysToLoad, 'array', extractArrayVariable, mainJs);
|
finalJS += loadThings(arraysToLoad, 'array', extractArrayVariable, mainJs);
|
||||||
|
@ -174,7 +175,7 @@ function main(argv) {
|
||||||
'exports.QUERY = QUERY;exports.EXPECTED = EXPECTED;');
|
'exports.QUERY = QUERY;exports.EXPECTED = EXPECTED;');
|
||||||
const expected = loadedFile.EXPECTED;
|
const expected = loadedFile.EXPECTED;
|
||||||
const query = loadedFile.QUERY;
|
const query = loadedFile.QUERY;
|
||||||
var results = loaded.execQuery(loaded.getQuery(query), index);
|
var results = loaded.execSearch(loaded.getQuery(query), index);
|
||||||
process.stdout.write('Checking "' + file + '" ... ');
|
process.stdout.write('Checking "' + file + '" ... ');
|
||||||
var error_text = [];
|
var error_text = [];
|
||||||
for (var key in expected) {
|
for (var key in expected) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue