← All posts
EngineeringMay 27, 2026 · 11 min read

Hybrid RAG: BM25 + vectors, merged with RRF

Why we fuse lexical and semantic retrieval, and what Reciprocal Rank Fusion buys us in practice.

DK
Devon Krause
Founding engineer

Neither retriever is enough

Vector search finds what a query means; BM25 finds what it says. Product names, error codes and exact phrases are lexical problems, and embeddings routinely fumble them. Paraphrases and conceptual questions are semantic problems where BM25 is blind. Indexing runs both, always.

Why RRF as the merge

Reciprocal Rank Fusion merges the two result lists using only ranks, not scores, which matters because BM25 scores and cosine similarities live on incomparable scales. RRF needs no tuning corpus, degrades gracefully when one retriever has a bad day, and is trivially stable to re-run.

In practice the fused list beats either retriever alone across our evaluation sets, and the failure cases become explainable: you can always see which list proposed a chunk and at what rank.

Keep reading