- Extract MergeStrategy trait with merge()/name() methods - Implement RrfStrategy with configurable k (default 60) - Refactor scatter_gather_search to accept &dyn MergeStrategy - Add RRF simulation to benchmark script (simulate_distributed_search_rrf) - Re-run full benchmark (3989 queries) with updated comparison reports - Add topology unit tests (NodeId, NodeStatus, Node helpers) Benchmark results: Score-based merge: avg tau = 0.798 (FAIL, common-term tau = 0.152) RRF merge: avg tau = 0.134 (FAIL, rank-only loses score signal) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| corpus | ||
| queries | ||
| results | ||
| README.md | ||
| simulate.py | ||
Score Comparability Benchmark
Tests whether _rankingScore values from different shards are comparable when documents are distributed unevenly across shards.
Problem Statement
Meilisearch's ranking pipeline computes scores using local statistics (term frequency, document frequency). When shards have very different document distributions, identical queries may return scores that aren't directly comparable, leading to incorrect merged rankings.
Experiment Design
- Ground truth: Single Meilisearch index with all documents
- Distributed setup: Same documents sharded across N nodes with intentional skew
- Measurement: Kendall tau (τ) between merged distributed results and ground truth
- Pass criterion: τ ≥ 0.95 on average across 10k random queries
Corpus Structure
- 100,000 documents total
- 10 shards (shard 0 = normal, shard 1 = 100× normal, shard 9 = 0.01× normal)
- Documents have: id, title, content (synthetic text), category (for filtering)
- 50 unique terms distributed across documents with varying frequencies
Directory Layout
corpus/: Test document sets (JSONL)queries/: Generated query sets for experimentsresults/: Experimental results and analysis
Running Experiments
See individual experiment scripts in results/ directories.