跳到正文
Elaine Blog
返回

BM25、搜索相关性与排序调优

Elasticsearch 与搜索架构

相关性调优不能靠“把 boost 从 2 改成 5 感觉更好”。先建立带期望结果的离线查询集,再理解 BM25、字段权重和业务信号怎样组合,用指标比较每次变更。

Table of contents

Open Table of contents

BM25 的三个直觉

BM25 通常考虑:词在当前文档中出现得更多,相关性上升;词在全部文档中越少见,区分度越高;较长文档天然包含更多词,需要长度归一化。词频收益会逐渐饱和,不会无限线性增加。

score ≈ IDF(term) × 饱和后的词频 / 文档长度归一化

运行实验室 BM25 测试下载

mvn -Dtest=SearchArchitectureTest#invertedIndexFindsDocumentsAndFilterDoesNotChangeScore test

标题包含两次 Java 的文档排在只包含一次的文档之前。示例公式与 Lucene 实现不完全等价,但能验证词频、IDF 和长度三个变量。

建立可重复评测

查询集至少包含高频词、长尾词、错别字、类目词、无结果词和敏感查询。每条查询由业务人员标注相关等级,再计算 Precision@K、Recall@K、MRR 或 nDCG。MRR 关注第一个相关结果的位置;nDCG 能处理多级相关性并重视前排。

先调文本:字段选择、分析器、同义词、短语和 minimum_should_match。再加入业务信号,如销量、库存、新鲜度和个性化。业务信号必须限幅或衰减,否则热门商品会永久压住更相关结果。

解释与发布

保存查询模板、索引版本、同义词版本和评测结果。候选方案先离线评测,再用小流量 A/B 测试观察点击、转化、零结果率和延迟;点击率会受位置偏差影响,不能单独代表相关性。

下一步

继续阅读09-06 聚合、桶与分析查询,在搜索结果上构建分类和统计视图。


分享这篇文章:

上一篇
Query DSL 与 Filter Context
下一篇
聚合、桶与分析查询