主题
相关性打分原理
Elasticsearch 采用基于 Lucene 的评分算法来衡量文档与查询的相关性,影响搜索结果的排序。理解相关性打分有助于优化查询效果。
1. 基本概念
相关性评分(_score)表示文档匹配查询的程度,分值越高表示越相关。
2. TF-IDF 与 BM25
- TF(Term Frequency):词项在文档中出现的频率,频率越高,相关性越强
- IDF(Inverse Document Frequency):词项在所有文档中的逆文档频率,出现越少,权重越高
- BM25:Elasticsearch 默认使用的改进版 TF-IDF 算法,结合词频、文档长度和其他参数,效果更佳
3. 计算公式简述(BM25)
$$ \text{score}(q,d) = \sum_{t \in q} IDF(t) \cdot \frac{tf(t,d) \cdot (k_1 + 1)}{tf(t,d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{avgdl})} $$
- ( tf(t,d) ):词项 ( t ) 在文档 ( d ) 中的频率
- ( |d| ):文档长度
- ( avgdl ):平均文档长度
- ( k_1, b ):调节参数,默认分别为 1.2 和 0.75
- ( IDF(t) ):词项逆文档频率
4. 其他影响因素
- 字段权重(boost)
- 查询类型和结构
- 过滤条件(不影响评分)
5. 调优建议
- 根据业务需求调整字段权重
- 使用功能查询(function_score)自定义打分
- 分析查询日志,优化索引和查询策略
理解相关性打分机制,能帮助你精准调整搜索效果,提升用户体验和业务价值。