一尘不染

Elasticsearch:constant_score查询与bool.filter查询

elasticsearch

我正在尝试使用Elasticsearch获得完全匹配的结果(所以我不在乎在这里得分)

我看到有两种方法可以做到这一点:

{
    "query" : {
        "constant_score" : {
            "filter" : {
                "term" : {
                    "exact_match_field" : "hello world !"
                }
            }
        }
    }
}

要么

{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "exact_match_field": "hello world !"
        }
      }
    }
  }
}

两者都能工作,并给我想要的结果。它们之间有什么区别?使用一个与另一个相比有性能优势吗?

(我正在使用Elasticsearch V 5.6)

谢谢 !


阅读 1704

收藏
2020-06-22

共1个答案

一尘不染

恒定分数查询可为任何匹配的文档提供相等的分数,而与诸如TF, IDF等等的任何评分因素无关。当您不关心文档是否匹配多少而只是文档是否匹配并且也给出分数时,可以使用此分数过滤。

constant_score查询采用boost参数,该参数设置为与其他查询组合时每个返回文档的分数。默认情况下,boost设置为1。

如果您对下面的链接感兴趣,将为您提供更多见解

https://www.compose.com/articles/elasticsearch-query-time-strategies-and-
techniques-for-relevance-part-
ii/

2020-06-22