常量分数查询弹性搜索提升

时间:2014-05-09 12:11:26

标签: elasticsearch information-retrieval

我对弹性搜索中的常量得分查询的理解是,提升因子将被指定为每个匹配查询的得分。 documentation说:

  

包装过滤器或其他查询的查询,只返回一个等于过滤器中每个文档的查询提升的常量分数。

但是当我发送此查询时:

"query": {
    "constant_score": {
        "filter": {
            "term": {
                "source": "BBC"
            }
        },
        "boost": 3
    }
},
"fields": ["title", "source"]

所有匹配的文件得分为1?!我无法弄清楚我做错了什么,并且还尝试使用查询而不是在constant_score中过滤。

2 个答案:

答案 0 :(得分:2)

分数只是相对于给定结果集中的所有其他分数,因此所有分数均为3的结果集与所有分数均为1的结果集相同。

  

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

要么忽略常数分数,因为它未与其他查询合并或正在进行规范化。正如@keety所说,检查explain的输出,看看到底发生了什么。

答案 1 :(得分:1)

Constant score query可以为任何匹配的文档提供相同的分数,无论任何评分因素如TF,IDF等。当您不关心文档是否匹配但是文档是否匹配时,可以使用此值。与filter不同,也给出一个分数。

如果您希望特定查询的所有匹配文档的得分为3,那么您应该使用function score query,例如

"query": { "function_score": { "functions": [ { "filter": { "term": { "source": "BBC" } }, "weight": 3 } ] } ... }