Retrieval quality
Measured,
not asserted.
This site has had hybrid retrieval since P16 — a vector index, a lexical index, and reciprocal rank fusion over both. What it never had was any way to tell whether it works. The table below runs the answerable half of 12 labelled questions against the live index when this page loads, and scores what comes back.
Four numbers, because they disagree.
Recall asks whether the right page made the window at all — the ceiling on everything downstream, since no answer can cite a passage retrieval never returned. MRR asks how high, because a prompt with a token budget does not treat rank 1 and rank 5 alike. nDCG weights position and grade together. A change that raises recall while lowering MRR has moved the right answer into the window and pushed it down inside it; one number would have hidden that.
- Recall@5
- 76%of judged pages retrieved
- MRR
- 0.741.0 means always first
- nDCG@5
- 0.77position and grade
- Misses
- 0none
Per-query retrieval scores| Query | First hit | Recall | nDCG | Returned |
|---|
| How does the distributed rate limiter work? | #1 | 50% | 0.83 | 5 |
|---|
| token bucket algorithm redis | #1 | 50% | 0.83 | 5 |
|---|
| What did you do to make LLM inference faster? | #2 | 100% | 0.63 | 5 |
|---|
| agent orchestration tool calling | #1 | 100% | 1.00 | 5 |
|---|
| Where has Shivam worked? | #2 | 67% | 0.52 | 5 |
|---|
| What technologies does he know? | #1 | 67% | 0.83 | 5 |
|---|
| How do I get in touch? | #1 | 100% | 0.88 | 5 |
|---|
| Can I hire him for consulting? | #1 | 33% | 0.73 | 5 |
|---|
| how does search on this site work | #2 | 50% | 0.52 | 5 |
|---|
| WebAssembly and WebGPU benchmarks | #1 | 100% | 1.00 | 5 |
|---|
| quantum blockchain synergy | not found | 100% | 1.00 | 5 |
|---|
| distrbuted rate limitter | #3 | 100% | 0.50 | 5 |
|---|
12 queries is a small set, and that is the honest limitation. Enough to catch a retriever that has broken outright; nowhere near enough to separate two good rankings, where the confidence interval on twelve queries is wider than any difference worth shipping. Growing it means writing judgements by hand, which is the real cost of evaluation and the reason so much retrieval ships unmeasured. Judgements are keyed on URL rather than chunk id, so editing a paragraph does not invalidate the set.
What the first run actually found
Recall came back at 42% with seven misses, which read as a broken retriever. It was not. Six of the seven judged pages the corpus does not index at all — it covers projects, blog posts, skills, service offerings, experience, achievements and certifications, and nothing else. No ranking could have returned /contact or /compute, so those queries were measuring content coverage while reporting a retrieval number. A seventh “miss” was the deliberately-unanswerable query, whose reciprocal rank is zero by definition.
The judgements were not edited to match. “How do I get in touch” is a reasonable thing to ask a portfolio, and deleting the query because the index cannot answer it would have raised the score by hiding the gap. The two are reported separately instead, because they have completely different fixes: one is a retrieval problem, the other is four lines in buildCorpus.
The judgement set, and why each query is in it
How does the distributed rate limiter work?Direct lookup by topic. If this fails, retrieval is broken outright.token bucket algorithm redisKeyword-shaped rather than a question — the lexical half should carry this one.What did you do to make LLM inference faster?Natural language with no shared vocabulary beyond 'inference'.agent orchestration tool callingThree terms, all of which appear on exactly one page.Where has Shivam worked?Several pages are legitimately relevant — tests that grading is used at all.What technologies does he know?Broad question with a clear best answer and several acceptable ones.How do I get in touch?Two pages equally correct. Either at rank 1 should score the same.Can I hire him for consulting?Commercial intent phrased without any word on the target page's title.how does search on this site workSelf-referential. The corpus describes its own retrieval, so this should be easy — and it is a good canary for the index being stale.WebAssembly and WebGPU benchmarksTerms that appear on one lab page and nowhere else.quantum blockchain synergyDeliberately unanswerable. An empty judgement set means recall and nDCG are 1 by definition; what this actually checks is that the retriever does not crash and that /ask degrades honestly rather than confidently returning the nearest thing it has.distrbuted rate limitterTwo misspellings. Lexical matching fails here by construction, so this measures whether the vector half is contributing anything at all.