Hi all,
We measured how much BM25 relevance depends on the analyzer alone, and wanted to share the results and the plugin with the community.
Setup: Elasticsearch 9.5.4, plain BM25, MIRACL English (32.9M passages, 799 queries), official trec_eval.
- vs standard: F1@10 +18.8%, nDCG@10 +15.7%, Recall@100 +14.8%
- vs built-in english (Porter): +7.6% to +8.5% on every top-10 metric
The main gains come from dictionary lemmas instead of stemming: Porter can't map sold→sell or built→build, and it over-merges majority→major and United→unit.
Limits: one dataset, English only, lexical only.
Disclosure: I work at Bitext, which built the analyzer. It's Apache 2.0 and installs as an ES 9.x stable plugin (also OpenSearch 3.4+ and Solr 10).
Benchmark (fully reproducible): GitHub - bitext/bitext-search-benchmarks: Reproducible MIRACL lexical-search benchmarks to measure the benefits that the Bitext English Analyzer adds to Elasticsearch · GitHub
Feedback is welcome, especially cases where it does worse than the english analyzer on your own data.