BM25 相关性评分
本章定位:搜索结果为什么按这个顺序排列?这是 BM25(Best Match 25)算法的决定。理解评分因子让你能调优搜索排序。
定义与作用
BM25 是 Elasticsearch 5.0+ 的默认相关性评分算法,由三个因子决定:
- TF(词频):词在文档中出现次数——出现越多得分越高(但饱和增长,第 10 次几乎不加分)
- IDF(逆文档频率):词在整个索引中的稀有程度——越稀有权重越高
- 字段长度归一化:相同词频下,短字段比长字段评分更高
核心原理:评分公式
Score(D, Q) = ∑ IDF(qi) × (f(qi,D) × (k1+1)) / (f(qi,D) + k1 × (1-b+b×|D|/avgdl))
k1(默认 1.2):TF 饱和速度b(默认 0.75):长度归一化强度
完整示例:小崔查看评分详情
POST /courses/_search
{
"explain": true,
"query": {
"match": { "title": "Python 数据分析" }
}
}
小结
BM25 三因子:词频(TF)+ 逆文档频率(IDF)+ 长度归一化。调优参数 k1 和 b 一般不改,特殊场景(如电商标题搜索)可调 b 降低长度惩罚。