Accents stop being a barrier.
Accent and case normalization brings ‘ecran’ together with ‘Écran’. The same analyzer processes both documents and queries.
ecran → ÉcranFull-text search, filters, and facets, embedded in the bext engine. Turn your application's content into a searchable local index with Tantivy.
See the integrationAn illustrated search flow using a sample document.
Tantivy is a full-text search library written in Rust. bext embeds it in the runtime so your application can query an index on disk, without operating an external search service.
Accent and case normalization brings ‘ecran’ together with ‘Écran’. The same analyzer processes both documents and queries.
ecran → ÉcranA prefix on the last term can match a word before it is complete. Guardrails avoid broadening very short terms and numeric identifiers.
repar → réparationWhen the initial search returns no results, a typo-tolerant fallback can try again. Existing matches take priority over a fuzzy retry.
ipone → iphoneCombine exact filters, counts by value, and numeric ranges. Facets describe the same filtered document set as the search results.
brand · category · priceIndexes live inside the site's directory. The V8 bridge uses the same access boundary as the site's files and database.
.bext/search/catalogA dedicated indexing tool inserts or updates documents by stable ID. An ID list lets you delete content that has been removed.
insert · update · deleteDeclare text fields, facets, and numeric values. Export your documents as JSON Lines with a stable ID.
An indexing job writes to Tantivy on the site's disk. The server keeps readers; writes happen outside user requests.
Query the index from the server. Receive ranked hits, totals, and facet counts to build your own search experience.
Illustrative examples of supported behavior. Actual results depend on the indexed documents and query.
ecranThe accent is normalized.
The query and document both go through accent and case normalization.
reparThe final word can be incomplete.
An eligible prefix on the last term opens up matching as the user types.
iponeThe fallback follows zero results.
Typo tolerance is a second attempt; it does not replace a search that has already found results.
Enable the backend on a compatible bext server, create the index, then call the native bridge from a server-side V8 context.
The operator sets BEXT_SEARCH_TANTIVY=1 in the server process configuration. The backend is disabled by default.
Install the bext-search-index tool, declare a schema, and supply your JSON Lines documents. Facet fields must be declared when the index is created.
The __search bridge accepts an index name and a JSON query. It returns a JSON string containing hits, totals, and the requested facets.
{
"text_fields": ["name", "description"],
"facet_fields": ["category", "brand"],
"numeric_fields": ["price_cents"]
}{"id":"screen-01","name":"Écran OLED","description":"Écran de remplacement","category":"screen","brand":"Demo","price_cents":12900}bext-search-index --root /path/to/site \
--index catalog --spec spec.json \
--docs documents.jsonldeclare function __search(index: string, queryJson: string): string;
// In a server-side bext V8 context.
const results = JSON.parse(__search("catalog", JSON.stringify({
text: "ecran",
filters: [["category", "screen"]],
limit: 12,
offset: 0,
facets: [
["brands", { Terms: { field: "brand", size: 8 } }]
]
})));
// results.hits · results.total · results.facetsProduct catalogues, documentation, or a content library: build the interface that works for your users.