/* * 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 rendering search output * (currently titles and tags) are stored separately in an extra file. * * Installing dependencies: * yarnpkg add lunr * * Usage: * site ....some args.... --search-data-output tmp/search-raw.json * node make-search-index.js tmp/search-raw.json _site/search-index.json _site/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, {"title": x.title, "tags": x.tags}])) ), {encoding: 'utf8'})