textmark-engine
v1.0.0
Published
In-memory full-text search for Node.js with TF-IDF ranking, boolean queries, prefix and fuzzy matching
Maintainers
Readme
textmark-engine
In-memory full-text search for Node.js. Index documents, run TF-IDF ranked queries, boolean expressions, phrase search, prefix suggestions, and fuzzy matching.
Zero runtime dependencies. Node 18+.
Install
npm install textmark-engineQuick start
import { createIndex } from "textmark-engine";
const search = createIndex({
fields: ["title", "body"],
boost: { title: 3 },
});
search.add({ id: "1", title: "Node streams", body: "Readable and writable streams in Node.js" });
search.add({ id: "2", title: "Search engines", body: "Build an inverted index with TF-IDF ranking" });
search.add({ id: "3", title: "Fuzzy matching", body: "Find terms even with small typos" });
search.search("node stream");
// [{ id: "1", score: ..., matched: [...], document: {...} }]
search.search('title AND "inverted index"');
search.search("engin", { prefix: true });
search.search("fuzzy", { fuzzy: 1 });
search.suggest("strea"); // ["stream"]API
| Method | Purpose |
| --- | --- |
| createIndex(options) / new Textmark(options) | Create an engine |
| add(doc) / addAll(docs) | Index documents |
| update(id, patch) / remove(id) | Mutate the index |
| search(query, options) | Ranked search |
| suggest(prefix) | Autocomplete terms |
| toJSON() / Textmark.fromJSON() | Snapshot / restore |
Search options
limit— max hits (default10)prefix— match term prefixesfuzzy—true(distance 1) or a number
Boolean query syntax
AND, OR, NOT, and "quoted phrases".
What it is for
Local search in CLIs, docs sites, admin tools, or tests — without Elasticsearch. It runs in one Node process.
License
MIT
