代码之家  ›  专栏  ›  技术社区  ›  zhuguowei

bool查询是否存在执行顺序?

  •  0
  • zhuguowei  · 技术社区  · 3 年前

    filter 首先 must ?

    OST _search
    {
      "query": {
        "bool" : {
          "must" : {
            "term" : { "user.id" : "kimchy" }
          },
          "filter": {
            "term" : { "tags" : "production" }
          },
          "must_not" : {
            "range" : {
              "age" : { "gte" : 10, "lte" : 20 }
            }
          },
          "should" : [
            { "term" : { "tags" : "env1" } },
            { "term" : { "tags" : "deployed" } }
          ],
          "minimum_should_match" : 1,
          "boost" : 1.0
        }
      }
    }
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   Val    3 年前

    在您的例子中,术语查询 user.id 应该进入 filter 数组,因为它是一个不需要评分的精确匹配查询,因此 must 没有道理。 必须 应该用于需要评分的自由文本查询,而不是不需要评分的精确是/否查询。

    但要回答你的问题,是的, 滤器 must_not (我们称之为 filter context 必须 should 查询(我们称之为 query context

        2
  •  0
  •   Triet Doan    3 年前

    有一个 blog post 在Elasticsearch官方网站上,您可以准确了解这个主题。我不知道自2017年发表这篇文章以来,它是否仍然成立。当然,你可以通过阅读来更好地理解它,但是为了快速总结,它说

    “哪个查询首先运行”没有简单的答案!

    filter 应该在查询之前执行,以减少文档集,但博客声称

    所有内容都是交错的,不管它们是否是过滤器的查询。

    Profile API 根据博客的建议。