0

我有一个具有多个标准的搜索。

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

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

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

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

4

1 回答 1

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查询来实现自己的评分算法。

于 2014-01-25T11:52:16.573 回答