RAG at 500K Docs: The Recall Cliff Your Eval Doesn't See
The Benchmark That Breaks the Demo
Onyx released EnterpriseRAG-Bench this week: 500K+ synthetic documents spanning Slack, Gmail, Jira, GitHub, Confluence, Drive, HubSpot, Fireflies, and Linear, with misfiled files, near-duplicates, and conflicting versions baked in. The headline result is one every RAG architecture review this quarter should absorb. Dense vector retrieval drops from 90.7% recall at 5K documents to 50.6% at 500K. Same embedding model, same retriever, same queries. Corpus size is the only variable the experiment moves.
A RAG benchmark that tops out at 10K docs is a sales demo, not an eval. The cliff arrives somewhere between 100K and 1M documents depending on topical density.
Why BM25 Degrades More Gracefully
The ablation worth staring at: BM25 falls only from 85.8% to 68.4% across the same range. A 17pp drop against dense retrieval's 40pp collapse. The mechanism is structural, not stylistic. As the corpus grows, embedding-space neighborhood density grows monotonically with it. Where 3-5 documents touched a topic at 5K, 40-60 touch it at 500K. The canonical answer gets crowded out of top-k by semantically similar but irrelevant neighbors.
| Retriever | 5K docs | 500K docs | Absolute drop | Failure mode |
|---|---|---|---|---|
| Dense / vector | 90.7% | 50.6% | -40.1 pp | Neighborhood density |
| BM25 | 85.8% | 68.4% | -17.4 pp | Term overlap ambiguity |
BM25's failure mode (term ambiguity) is orthogonal to dense retrieval's failure mode (neighborhood density). That orthogonality is the cleanest argument for hybrid retrieval this quarter. Not because either retriever is best, but because their errors are uncorrelated.
The Production Implication
Two practical consequences fall out. First, fixed top-k is underfit for growing corpora. If top-k=10 worked at 5K docs where 3-5 documents were topically relevant, it fails at 500K where 40-60 are. Adaptive k, or aggressive cross-encoder reranking, becomes load-bearing. Second, any internal RAG demo benchmarked on fewer than 50K docs is systematically overstating production accuracy by 30-40 percentage points.
Separately, Bing's engineering team published a framing distinction between search indexing (optimizing what a human should read) and grounding indexing (optimizing what an LLM should cite). Standard recall@k measures the former. Production RAG failures come from the latter. Retrieved passages that are topically relevant but evidentially insufficient for the generated claim. The eval harness needs a claim-level evidence sufficiency score sitting alongside retrieval metrics.
What the benchmark doesn't tell you
The corpus is synthetic. The embedding model and ANN configuration are unspecified. Whether late-interaction models (ColBERT) or Matryoshka embeddings compress the gap is open. The cleanest answer is an in-house ablation on the deployed corpus at deployed scale.
What to do
Run your current retriever against EnterpriseRAG-Bench at 50K, 200K, and 500K scales — log recall@10/50 and MRR per scale tier
A/B hybrid retrieval (BM25 + dense + cross-encoder rerank) against dense-only on a 200K+ document slice
Instrument embedding neighborhood density (mean k-NN distance per ingest batch) as a production drift metric
Deprecate any internal RAG benchmark running on <50K docs as 'production-representative'