Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Diagnoses Qdrant search quality issues. Use when someone reports 'results are bad', 'wrong results', 'not relevant results', 'missing matches', 'recall is low', 'approximate search worse than exact', 'which embedding model', 'quality dropped after quantization', 'how to measure retrieval quality', 'build a golden set', 'ground truth dataset', or 'how to score recall@k'. Also use when search quality degrades without obvious changes.
.claude/skills/qdrant-qdrant-search-quality-diagnosis/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -35% | 0% |
Before tuning, establish baselines. Use exact KNN as ground truth, compare against approximate HNSW. Target >95% recall@K for production.
Use when: results are irrelevant or missing expected matches and you need to isolate the cause.
recall@k Web UI ANN Recallexact=true — and compute recall@k from the overlap ANN recall in CIPayload filtering and sparse vector search are different things. Metadata (dates, categories, tags) goes in payload for filtering. Text content goes in sparse vectors for search.
Use when: exact search returns good results but HNSW approximation misses them.
hnsw_ef at query time Search paramsef_construct (200+ for high quality) HNSW configm (16 default, 32 for high recall) HNSW configBinary quantization requires rescore. Without it, quality loss is severe. Use oversampling (3-5x minimum for binary) to recover recall. Always test quantization impact on your data before production. Quantization
Use when: exact search also returns bad results.
Check Qdrant team recommendations on how to choose an embedding model.
Test top 3 MTEB models on 100-1000 sample queries Hosted Qdrant inference. Score them against a labeled set to compare apples to apples Measuring Retrieval Relevance.
Use when: exact search also returns bad results and model choice is confirmed by user.
Optimize search according to advanced search-strategies skill.
Use when: user has no golden set, asks "how do I know if my search is good?", or needs to gate releases on a retrieval metric.
ranx Measuring Retrieval RelevanceRecall@k for RAG, MRR/Hits@1 for single-answer, NDCG@k for re-ranking Choosing the metrichnsw_ef lower than results requested (guaranteed bad recall)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 21,523 | 18,974 | -12% | 1 | 1 | 0% | 3,591 | 3,981 | +11% | 0 | 0 | — |
case-02 | fail→pass | 25,483 | 16,679 | -35% | 1 | 1 | 0% | 4,147 | 4,055 | -2% | 0 | 0 | — |
case-03 | fail→fail | 22,666 | 15,728 | -31% | 1 | 1 | 0% | 3,705 | 3,952 | +7% | 0 | 0 | — |
case-04 | pass→pass | 16,299 | 9,534 | -42% | 1 | 1 | 0% | 3,093 | 3,157 | +2% | 0 | 0 | — |
case-10 | pass→pass | 20,243 | 9,089 | -55% | 1 | 1 | 0% | 3,010 | 2,912 | -3% | 0 | 0 | — |
case-05 | pass→pass | 16,302 | 6,019 | -63% | 1 | 1 | 0% | 2,400 | 2,053 | -14% | 0 | 0 | — |
case-06 | pass→pass | 11,930 | 9,393 | -21% | 1 | 1 | 0% | 2,083 | 2,964 | +42% | 0 | 0 | — |
case-07 | fail→pass | 17,759 | 10,126 | -43% | 1 | 1 | 0% | 2,640 | 3,115 | +18% | 0 | 0 | — |
case-08 | pass→pass | 10,801 | 6,949 | -36% | 1 | 1 | 0% | 1,605 | 2,614 | +63% | 0 | 0 | — |
case-09 | fail→pass | 15,335 | 13,723 | -11% | 1 | 1 | 0% | 2,695 | 3,254 | +21% | 0 | 0 | — |
case-11 | pass→pass | 17,126 | 11,994 | -30% | 1 | 1 | 0% | 2,850 | 3,366 | +18% | 0 | 0 | — |
case-12 | pass→pass | 15,902 | 8,538 | -46% | 1 | 1 | 0% | 2,305 | 2,500 | +8% | 0 | 0 | — |
case-13 | fail→pass | 17,164 | 3,667 | -79% | 1 | 1 | 0% | 2,907 | 1,902 | -35% | 0 | 0 | — |
case-14 | pass→pass | 15,523 | 15,945 | +3% | 1 | 1 | 0% | 2,501 | 3,677 | +47% | 0 | 0 | — |
case-15 | fail→pass | 11,138 | 3,519 | -68% | 1 | 1 | 0% | 1,945 | 1,773 | -9% | 0 | 0 | — |
case-16 | pass→pass | 21,705 | 16,345 | -25% | 1 | 1 | 0% | 3,450 | 4,156 | +20% | 0 | 0 | — |
case-17 | pass→pass | 8,711 | 5,322 | -39% | 1 | 1 | 0% | 1,254 | 2,072 | +65% | 0 | 0 | — |
case-18 | pass→pass | 15,658 | 6,648 | -58% | 1 | 1 | 0% | 2,140 | 2,372 | +11% | 0 | 0 | — |
case-19 | pass→pass | 11,079 | 6,711 | -39% | 1 | 1 | 0% | 1,893 | 2,391 | +26% | 0 | 0 | — |
case-20 | pass→pass | 13,638 | 10,637 | -22% | 1 | 1 | 0% | 2,224 | 2,930 | +32% | 0 | 0 | — |
case-21 | pass→pass | 16,847 | 12,269 | -27% | 1 | 1 | 0% | 3,274 | 3,712 | +13% | 0 | 0 | — |
case-22 | pass→pass | 22,627 | 18,922 | -16% | 1 | 1 | 0% | 3,540 | 4,395 | +24% | 0 | 0 | — |
case-23 | pass→pass | 18,577 | 17,304 | -7% | 1 | 1 | 0% | 2,861 | 4,033 | +41% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +26 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.