教程 elasticsearch tutorial

相关性打分原理

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)自定义打分
  • 分析查询日志,优化索引和查询策略

理解相关性打分机制,能帮助你精准调整搜索效果,提升用户体验和业务价值。