Quick Verdict: BM25 beats embeddings when the user already typed the rare token you must find: a SKU, a docket number, a clause ID, a drug name, or a config key. Embeddings beat BM25 when the user describes a problem in new words and the answer never uses those words.
BM25 is a lexical ranking function that scores documents by term frequency and inverse document frequency, so exact and rare tokens dominate the result. Embeddings retrieve by vector neighborhood. Enterprise RAG fails when teams delete BM25 after the first embedding demo and then cannot find an identifier the model “should have understood.”
This page is a when-to-use-each decision. It is not a hybrid-search product comparison. Hybrid retrieval can come later. First decide which signal is allowed to miss.
Where do the two methods systematically disagree?
| Query shape |
BM25 tends to win |
Embeddings tend to win |
| Identifiers |
Invoice 8821-K, CVE IDs, ticker-plus-cusip |
Near-miss strings if the embedding saw similar IDs |
| Rare technical tokens |
Internal function names, error codes |
Paraphrases of the same incident |
| Boilerplate-heavy corpora |
The one differing sentence in a template |
Semantic themes across many similar files |
| Vocabulary drift |
Fails when users never use the file’s words |
Survives synonyms and messy tickets |
| Short navigational queries |
“Q3 brand safety policy” |
Long “how do we handle…” stories |
Embeddings smear rare tokens toward frequent neighbors. That is useful for support chat. It is harmful for a lawyer who typed the exhibit number. BM25 ignores most semantics. That is harmful for a nurse who described symptoms without the order-set name. Neither method is serious or casual. They optimize different errors.
When should BM25 be the primary retriever?

Make BM25 primary when a miss on an exact token is an incident. Catalog search, policy lookup by clause ID, IT runbooks keyed by error code, and financial instrument lookups belong here. Log the query tokens. If more than a small slice are IDs or codes, do not lead with vectors.
Also lead with BM25 during corpus onboarding. A new share drive has filenames and headings that users already know. Embeddings need a stable chunker and a gold set before they earn the default slot. Shipping vectors first creates a demo that cannot find last week’s PDF title.
Keep the BM25 analyzer honest. Language stemming that eats SKU punctuation will throw away the advantage. Store a raw-token field. Enterprise search that “helpfully” lowercases and splits every hyphen will lose to a junior who still uses Ctrl+F.
When should embeddings take the lead?
Lead with embeddings when the corpus is narrative and the queries are narrative: incident write-ups, research notes, meeting summaries, clinical impressions without codes. Measure with the same gold set you would use for any retriever. Do not switch because a vendor called lexical search legacy.
Embeddings also help when the same fact lives under five titles. BM25 will pick the title that shares words. That may be the outdated SOP. A vector neighbor can surface the rewritten SOP if the chunker kept the fact intact. Confirm with humans. Neighborhood is not authority.
Embedding jobs belong on capacity you control when the documents cannot enter a shared region. Private AI infrastructure keeps those jobs on exclusive U.S. GPUs. The hosting choice does not decide BM25 versus dense. It decides who else could have seen the text.
How do you prove the winner on your corpus?
Split queries into identifier-like and paraphrase-like before you score. A blended recall number will hide a total failure on SKUs. Report recall@k for each slice. Switch the default only for the slice that improved without breaking the other.
If both slices matter, run BM25 and embeddings as two first stages and merge with an explicit rule: identifiers prefer lexical rank, prose prefers dense rank. That rule is not a product name. You can implement it with a query classifier you own. A later hybrid page can discuss fused ranking. This page stops at the miss you will not tolerate.
Store both indexes where AI storage architecture can rebuild one without locking the other. Dual indexes cost space. They cost less than a single index that cannot find a contract number during an audit.
What should you stop doing?
Stop deleting the lexical index after the embedding kickoff. Stop evaluating only with chat transcripts. Stop claiming embeddings “understand” a part number. Stop putting BM25 on a laptop analyzer and vectors on a different tokenizer and then calling the comparison fair.
OnePlus Platform, OneSource Cloud's AI orchestration platform, can split GPU quota between embedding backfills and interactive serving so a lexical-versus-dense experiment does not stall production. Scheduling is not ranking. Someone still reads the slice report.
FAQ
Is BM25 outdated once we have embeddings?
No. BM25 remains the safer default for token-true queries. Many enterprise RAG outages are identifier misses, not a lack of semantics. Keep BM25 until a gold slice shows embeddings matching those identifiers without new leaks.
Does this mean we should not use hybrid search?
It means you should not start by naming a hybrid product. Decide which miss is unacceptable. If both misses are unacceptable, add a second stage. Hybrid architecture is a later article family. This article only assigns the first-stage winner by query shape.
Can a reranker fix a missing BM25 hit?
A reranker can only reorder candidates it received. If the identifier never entered the window, the reranker cannot invent it. Fix the first stage or add a lexical path. Paying for a cross-encoder does not restore a dropped SKU.
Where should BM25 run relative to GPUs?
BM25 is usually CPU-bound. GPUs still matter for the embedding path and for any rerank model. Size them separately. Exclusive cards help the dense path in regulated tenancy. They do not accelerate a well-tuned inverted index in a way you should market as a GPU feature.
How do regulated teams apply this?
If a reviewer will ask “show me document 14-C,” BM25 or an exact key lookup must be in the path. If a clinician describes a situation without codes, embeddings may lead, and a human still confirms the cite. Do not advertise HIPAA compliance from a ranking choice. Verify the corpus boundary on the program that owns the records, including healthcare paths when PHI is real.
Summary
BM25 beats embeddings when the query is already the token you must retrieve. Embeddings beat BM25 when the query is a paraphrase of narrative text. Score those slices separately. Do not retire lexical search because a demo answered a vague question well.
Host embedding and index rebuilds on exclusive compute when the corpus requires it. OneSource Cloud can provide that GPU and storage boundary. The decision of which ranker may miss still belongs to the search owner. Start from the OneSource Cloud private retrieval hosting conversation only after the slice report exists.