quartz/assets/js/semantic-search.js
2022-11-20 15:09:58 -08:00

47 lines
1.0 KiB
JavaScript

import {
operandClient,
indexIDHeaderKey,
} from "https://unpkg.com/@operandinc/sdk@4.1.3/dist/esm/index.js"
const apiKey = "{{$.Site.Data.config.search.operandApiKey}}"
const indexId = "{{$.Site.Data.config.search.operandIndexId}}"
const operand = operandClient(
ObjectService,
apiKey,
"https://api.operand.ai",
{
[indexIDHeaderKey]: indexId,
}
);
async function searchContents(query) {
const results = await operand.searchWithin({
query,
limit: 10,
})
console.log(results.matches)
return results.matches.flat()
}
function debounce(func, timeout = 200) {
let timer;
return (...args) => {
clearTimeout(timer)
timer = setTimeout(() => { func.apply(this, args); }, timeout)
};
}
registerHandlers(debounce((e) => {
term = e.target.value
if (term !== "") {
searchContents(term)
.then((res) => res.results.map(entry => ({
url: entry.object.properties.url,
content: entry.snippet,
title: entry.object.metadata.title
})
))
.then(results => displayResults(results))
}
}))