ElasticSearch bool查询与应当和过滤器结合

时间:2018-09-07 10:04:58

标签: elasticsearch

在elasticsearch中,你知道为什么

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              conditions1
            ]
          }
        },
        {
          "bool": {
            "must": [
              conditions2
            ]
          }
        }
      ],
      "filter": [
        conditions3
      ]
    }
  }
}

如果condition3为true,则始终查找文档 即使condition2和condition1为假

2 个答案:

答案 0 :(得分:1)

根据https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html上的文档:

  

如果布尔查询在查询上下文中并且具有必须或过滤器   子句,那么即使没有一个文档将匹配布尔查询   查询应该匹配。在这种情况下,这些子句仅用于   影响分数。如果布尔查询是过滤器上下文或具有   既不必须也不进行过滤,则至少应有一个查询查询   为其匹配文档以匹配布尔查询。此行为可能是   通过设置minimum_should_match参数明确控制。

答案 1 :(得分:0)

通过包装应该解决的问题。请让我知道是否有人有更清洁的解决方案

{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "bool": {
                  "must": [
                    {
                      condition1
                    },
                    {
                      condition2
                    }
                  ]
                }
              }
            ]
          }
        }
      ],
      "filter": [
        {
          condition3
        }
      ]
    }
  }
}