默认情况下,Elasticsearch根据相关性评分(_score
)对匹配的搜索结果进行排序,相关性评分衡量每个文档与查询的匹配程度。虽然每种查询类型可以计算不同的相关性得分,但得分计算也取决于查询子句是在查询还是过滤器上下文中运行。
在ElasticSearch 2.X~5.X中默认使用的是TF/IDF算法计算相关性,5.X以后默认使用BM25算法。在7.X版本中不再使用TF/IDF算法。目前,我使用的版本为7.10.1
,只支持BM25算法和boolean算法。
BM25
目前ES默认的相似性度量算法为BM25,具体公式为:
该公式为文档 d d d对于查询 Q Q Q的相似性评分:
- n n n 为查询分词总数(例如查询
this is a test
的话就是有4个分词this
,is
,a
,test
) - N N N 为文档总数
- q i q_{i} qi 为查询的第 i i i个分词
- n ( q i ) n(q_{i}) n(qi) 为包含 q