我对弹性搜索中的常量得分查询的理解是,提升因子将被指定为每个匹配查询的得分。 documentation说:
包装过滤器或其他查询的查询,只返回一个等于过滤器中每个文档的查询提升的常量分数。
但是当我发送此查询时:
"query": {
"constant_score": {
"filter": {
"term": {
"source": "BBC"
}
},
"boost": 3
}
},
"fields": ["title", "source"]
所有匹配的文件得分为1?!我无法弄清楚我做错了什么,并且还尝试使用查询而不是在constant_score中过滤。
答案 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
}
]
}
...
}