Type a question. This page embeds it with XERJ's actual built-in embedder — the same feature-hashing vectorizer that powers the semantic_text field — then ranks a small corpus by cosine similarity. Everything below runs client-side; the embedder was ported line-for-line from the Rust engine and reproduces its vectors bit-for-bit.
Honest by design. XERJ's built-in embedder is a lexical / sub-word vectorizer, not a neural model — it scores on shared words and word-stems, so paraphrases that reuse vocabulary rank high, while pure synonyms with no shared characters do not. That is exactly what ships zero-config with semantic_text. When you configure a neural [embedding] endpoint, XERJ swaps the model in at ingest and query time through the same wire path and the same semantic query shown below — nothing else in your code changes.
The exact algorithm from xerj-ai/src/local.rs · local_embed(), running in JavaScript:
±1.0.#-padded and its character trigrams are hashed the same way at weight 0.35 — so run, running, and runs share buckets and partially match._score XERJ returns for a cosine field is (1 + cosine) / 2.all-MiniLM-L6-v2 so a neural swap needs no remappingsemantic_text field on ingestThis page is the client-side twin of three ordinary Elasticsearch-wire calls against a running XERJ on :9200. No vector database, no embedding service, no glue.
Reproducibility. The embedder here was ported from engine/crates/xerj-ai/src/local.rs and validated bit-for-bit against the Rust engine: across 9 texts at 64/128/384 dims, all 2,880 / 2,880 f32 vector elements matched (worst ULP difference: 0). The engine's own unit-test property — a paraphrase ranking above unrelated text — reproduces to the bit: sim_relevant = 0.62630904 > sim_unrelated = 0.05279395. All example queries above rank their intended document first.