@jrc03c/search
v0.0.12
Published
This is a library of miniature search engines for small corpora. It's similar to [Lunr](https://lunrjs.com/) but less well-made. It offers multiple search engines to handle different scoring preferences and context considerations. For example, the `BM25Se
Readme
Intro
This is a library of miniature search engines for small corpora. It's similar to Lunr but less well-made. It offers multiple search engines to handle different scoring preferences and context considerations. For example, the BM25SearchIndex class — like Lunr — scores search results using the Okapi BM25 algorithm, which is useful for figuring out which documents best match some set of keywords; but the FuzzySearchIndex class scores search results by Levenshtein distance, which is useful for handling incorrect spellings and finding similar-looking words and phrases.
Installation
npm install --save @jrc03c/searchUsage
The various search index classes have roughly the same API, so their usage should all be pretty similar. For example:
// ...In all classes, higher scores mean better matches (though the exact score ranges differ across classes).
Non-string documents
All of the search indices also support the processing of non-string documents. For example:
import { FuzzyBM25SearchIndex } from "@jrc03c/search"
const docs = [
{ name: "Alice", age: 23, position: "Teacher" },
{ name: "Bob", age: 45, position: "Administrator" },
{ name: "Cheryl", age: 67, position: "Support Technician" },
]
const index = new FuzzyBM25SearchIndex()
index.process(docs)
console.log(index.search("Alicia"))
// ...Saving and loading an index
Search indices can be saved to disk for later use. For example:
import { SearchIndex } from "@jrc03c/search"
import fs from "node:fs"
const docs = [...]
const index = new SearchIndex()
index.process(docs)
const indexFile = "path/to/index.json"
fs.writeFileSync(indexFile, JSON.stringify(index), "utf8")
// And then sometime later:
!(() => {
const index = new SearchIndex(JSON.parse(fs.readFileSync(indexFile, "utf8")))
console.log(index.search("some query"))
})()Model strengths and weaknesses
🚧 UNDER CONSTRUCTION 🚧
API
🚧 UNDER CONSTRUCTION 🚧
