ElasticSearch得分的分母是什么?

时间:2014-01-25 03:17:16

标签: lucene elasticsearch bonsai-elasticsearch

我的搜索有多个标准。

每个标准(按should分组)具有不同的加权分数。

ElasticSearch返回结果列表;每个都有一个分数 - 这对我来说似乎是一个任意分数。这是因为我无法找到该分数的分母。

我的问题是 - 如何将每个分数表示为一个比例?

将每个分数除以max_score将无效,因为它会将最佳匹配显示为与搜索条件100%匹配。

1 个答案:

答案 0 :(得分:1)

_score计算取决于所使用的查询组合。例如,一个简单的查询,如:

{ "match": { "title": "search" }}

将使用Lucene的TFIDFSimilarity,结合:

  • 术语频率(TF):术语search出现在本文档的title字段中的次数是多少?分数越高,分数越高

  • 逆文档频率(IDF):术语search出现在索引中所有文档的title字段中的次数是多少?通常,降低得分

  • 字段规范:title字段有多长?场地越长,得分越低。 (title等较短的字段被认为比body等较长的字段更重要。)

  • 查询规范化因子。 (可以忽略)

另一方面,bool这样的查询:

"bool": {
    "should": [
        { "match": { "title": "foo" }},
        { "match": { "title": "bar" }},
        { "match": { "title": "baz" }}
    ]
}

将计算匹配的每个子句的_score,将它们加在一起然后除以子句的总数(并再次应用查询规范化因子)。

所以这完全取决于您正在使用的查询。

您可以通过在查询中添加_score参数来详细解释explain的计算方法:

curl localhost:9200/_search?explain -d '
{
    "query": ....
}'
  

我的问题是 - 我怎样才能将每个分数表示为一个比例?

如果不了解您希望查询执行的操作,则无法回答此问题。根据您的使用案例,您可以使用function_score query来实施自己的评分算法。