Retrieval-augmented generation works by fetching passages a model did not memorize and appending them to the prompt, so the answer is grounded in a source you control rather than in training data the AWS explainer the IBM overview. Google's documentation puts the operational point bluntly: if the retrieved information is irrelevant, the generation can be grounded and still be off topic or wrong the Google Cloud RAG page. Retrieval, not prompting, is where most answer-quality problems actually live.
The two families of retriever fail in complementary ways. BM25 is a lexical ranking function that scores documents by how often query terms appear, adjusted for term rarity and document length, which makes it excellent for unique identifiers and technical terms and blind to meaning Anthropic's contextual retrieval writeup. Dense embeddings do the reverse: they match paraphrase and concept ("how do I get back into my account" finds "Account Recovery") but routinely underweight a rare string that appears verbatim in exactly one document the pgEdge hybrid search post.
A worked example makes the split concrete. Set a query of Error code TS-999. Anthropic's writeup uses exactly this case: an embedding model may surface generic error-code documentation while missing the one page containing the literal string, whereas BM25 finds that string reliably Anthropic. Now ask "why did our data center revenue drop" and the failure flips: BM25 latches onto "revenue" and "data center" as separate tokens, while embeddings tie the whole intent to the right discussion the advanced retrieval pipeline walkthrough. If your query mix contains both shapes, and most production mixes do, a single retriever has a built-in error rate you cannot prompt your way out of.
The measured lift is real but not magical. On the WANDS e-commerce dataset, BM25 alone and pure vector search scored nearly identically (NDCG 0.6983 versus 0.6953), while a tuned hybrid reached 0.7497, about a 7.4 percent lift over either the hybrid search reference. That number is the honest expectation for adding a second retriever: single digit percentage points on ranking quality, larger on the specific query classes that were failing.
One more lever sits before retrieval and is often cheaper than either addition. Anthropic prepends a short generated context to each chunk before embedding and before BM25 indexing, and reports that this contextual retrieval cut failed retrievals by 49 percent, or 67 percent when combined with reranking Anthropic. Their cookbook reports contextual embeddings alone reduced the top-20 retrieval failure rate by 35 percent across data sources tested, with Pass@10 rising from roughly 87 to roughly 95 percent on a codebase dataset the Claude cookbook. If your chunks are small and context-poor, fix chunking and context before you add a reranker.



