常量得分查询 Elasticsearch 提升

7
我的理解是,Elasticsearch中的Constant Score Query会为每个匹配查询分配boost因子作为得分。documentation中表示:
“这是一个包装过滤器或其他查询的查询,并且对于筛选器中的每个文档,仅返回等于查询提升的常量得分的查询。”
但是,当我发送此查询时:
"query": {
    "constant_score": {
        "filter": {
            "term": {
                "source": "BBC"
            }
        },
        "boost": 3
    }
},
"fields": ["title", "source"]

所有匹配的文档都被赋予了1分?!我无法弄清楚我做错了什么,而且还尝试过使用查询(query)而不是在constant_score中使用过滤器(filter)。


1
运行相同的查询,将 explain 设置为 true,可能会更好地了解分数。 - keety
2个回答

3
Constant score query会给任何匹配的文档相同的分数,不考虑TF、IDF等得分因素。当您只关心文档是否匹配而不关心匹配程度时,可以使用此查询,并且还会给出一个分数,与filter不同。
如果您希望对于特定查询的所有匹配文档的分数都为3,则应该使用function score query,类似于:
"query": {
    "function_score": {
        "functions": [
            {
                "filter": { "term": { "source": "BBC" } },
                "weight": 3
            }
        ]
    }
    ...
}

3

分数只是相对于给定结果集中的所有其他分数而言的,因此,在所有内容的分数都为3的结果集中,与所有内容的分数都为1的结果集相同。

实际上,相关性分数的唯一目的就是以正确的顺序对当前查询的结果进行排序。您不应该尝试比较来自不同查询的相关性分数。- Elasticsearch Guide

无论是常量分数被忽略了,因为它没有与另一个查询组合,还是被标准化了。正如@keety所说,检查explain 的输出,以确定发生了什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接