【问题标题】:Elasticsearch : constant_score query vs bool.filter queryElasticsearch:constant_score 查询与 bool.filter 查询
【发布时间】:2018-12-11 01:50:50
【问题描述】:

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

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

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

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

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

(我使用的是 Elasticsearch V 5.6)

谢谢!

【问题讨论】:

    标签: elasticsearch elasticsearch-5


    【解决方案1】:

    恒定分数查询为任何匹配的文档提供相同的分数,而不考虑任何评分因素,如 TF, IDF 等。当您不关心文档是否匹配但只关心文档是否匹配时,可以使用此方法,并且也给分,不像过滤器。

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

    如果你有兴趣,下面的链接会给你更多的见解

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

    【讨论】:

    • 谢谢!知道它们之间的性能差异吗?
    • 另外,bool.filter 有何不同?仅仅是 boost 参数吗?
    • constant_score 的性能会更高,因为它不必根据 TF 和 IDF 因素对每个文档进行评分,这与 bool.filter 不同,它必须对每个文档进行评分
    • hmm,如果我在这里错了,请告诉我,但是 bool.filter,从这里 - elastic.co/guide/en/elasticsearch/reference/current/… ,说它不得分文档。我错过了什么吗?
    • 是的,你是对的,我的错,总结一下:当你需要分数时,使用 filter for filter 和 constant_score。
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2019-01-17
    • 2019-05-30
    • 2016-07-14
    相关资源
    最近更新 更多