hugo-theme-relearn/static/js/orama-adapter.js

61 lines
1.5 KiB
JavaScript
Raw Normal View History

2024-10-25 19:30:43 +00:00
import {
create,
search as oramaSearch,
insertMultiple,
} from "https://cdn.jsdelivr.net/npm/@orama/orama@latest/+esm";
// "https://unpkg.com/browse/@orama/orama@latest/dist/esm/index.js";
// https://cdn.jsdelivr.net/npm/@orama/orama@3.0.1/dist/esm/index.js
//import { createTokenizer } from '@orama/tokenizers/japanese'
//import { stopwords as japaneseStopwords } from "@orama/stopwords/japanese";
let searchEngine = null;
async function init() {
async function initIndex( index ){
searchEngine = await create({
schema: {
title: 'string',
content: 'string',
uri: 'string',
breadcrumb: 'string',
description: 'string',
tags: 'string[]',
},
/*
defaultLanguage: 'french',
components: {
tokenizer: {
stemmingFn: stemmer,
},
},
*/
});
await insertMultiple(searchEngine, index);
window.relearn.isSearchEngineReady = true;
window.relearn.executeInitialSearch();
}
if( window.index_js_url ){
var js = document.createElement("script");
js.src = index_js_url;
js.setAttribute("async", "");
js.onload = function(){
initIndex(relearn_searchindex);
};
js.onerror = function(e){
console.error('Error getting Hugo index file');
};
document.head.appendChild(js);
}
}
async function search( term ){
const searchResponse = await oramaSearch(searchEngine, {term: term, properties: '*'});
return searchResponse.hits.map( hit => ({ page: hit.document }) );
}
export { init, search };