red-arch/r/static/js/search.js

61 lines
1.8 KiB
JavaScript

let idxs = new XMLHttpRequest();
idxs.open('GET', '/static/js/search/search-idx-list.json', false);
idxs.send();
let idx_list =JSON.parse(idxs.responseText);
let lnrjs = new XMLHttpRequest();
lnrjs.open('GET', '/static/js/lunr.js', false);
lnrjs.send();
eval(lnrjs.responseText);
let meta = new XMLHttpRequest();
meta.open('GET', '/static/js/search/metadata.json', false);
meta.send();
var metadata = JSON.parse(meta.responseText)
async function getData(element) {
const url = `/${element}`;
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`Response status: ${response.status}`);
}
const json = await response.json();
return json
} catch (error) {
console.error(error.message);
}
}
onmessage = (e) => {
let query = e.data
let results = []
idx_list.forEach(element => {
p = getData(element)
p.then(function (json) {
let idx = lunr.Index.load(json)
res = idx.search(query).slice(0,100)
res.forEach(r => {
r.meta = metadata[r.ref]
})
results = results.concat(res)
results = results.sort(({score:a}, {score:b}) => b-a);
results = results.slice(0,100)
postMessage(results)
})
// let request = new XMLHttpRequest();
// request.open('GET', `/${element}`, false);
// request.send();
// console.log(JSON.parse(request.responseText))
// let idx = lunr.Index.load(JSON.parse(request.responseText))
// res = idx.search(query).slice(0,100)
// results = results.concat(res)
// results = results.sort(({score:a}, {score:b}) => b-a);
// results = results.slice(0,100)
// postMessage(results)
})
}