From 32a49d3179a969604410ff7507af939c77045b4f Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Sat, 17 Jun 2023 20:40:11 +0200 Subject: export search data, add indexing script --- make-search-index.js | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 make-search-index.js (limited to 'make-search-index.js') diff --git a/make-search-index.js b/make-search-index.js new file mode 100644 index 0000000..bb92b68 --- /dev/null +++ b/make-search-index.js @@ -0,0 +1,39 @@ + +/* + * make-search-index.js + * + * This converts a "search data" file produced by the haskell site builder into + * a lunr.js index and saves it in JSON. Metadata for search (currently titles) + * are stored separately in an extra file. + * + * Installing dependencies: + * yarnpkg add lunr + * + * Usage: + * site ....some args.... --search-data-output search-raw.json + * node make-search-index.js search-raw.json search-index.json search-meta.json + */ + +lunr = require("lunr") +fs = require("fs") + +if(process.argv.length !== 5) { + console.error('Needs exactly 3 arguments (input json, output index).'); + process.exit(1); +} + +documents = JSON.parse(fs.readFileSync(process.argv[2], {encoding: 'utf8'})) + +var idx = lunr(function () { + this.ref('link') + this.field('title', {boost: 10}) + this.field('text') + documents.forEach(function (doc) { + this.add(doc) + }, this) +}) + +fs.writeFileSync(process.argv[3], JSON.stringify(idx), {encoding: 'utf8'}) +fs.writeFileSync(process.argv[4], JSON.stringify( + Object.fromEntries(documents.map(x => [x.link, x.title])) + ), {encoding: 'utf8'}) -- cgit v1.2.3