过滤器不会与bool一起工作

时间:2017-12-20 10:12:34

标签: elasticsearch kibana

Iam尝试使用过滤器从elasticsearch收集结果。当我添加过滤器时,我得到意想不到的结果。 (我希望看到的结果只与术语“例外”或“错误”相匹配)。

也许我把过滤器放在了错误的地方?

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "message": "error"
          }
        },
        {
          "match": {
            "message": "exception"
          }
        }
      ],
      "must_not": {
        "match": {
          "message": "io.vertx.spi.cluster.zookeeper.ZookeeperClusterManager"
        }
      },
      "filter": [
        {
          "range": {
            "@timestamp": {
              "gt": "now-1000m"
            }
          }
        }
      ]
    }
  }
}

1 个答案:

答案 0 :(得分:0)

问题出在你应该的问题上。

<强>应

子句(查询)应出现在匹配的文档中。如果bool查询在查询上下文中并且具有must或filter子句,则文档将匹配bool查询,即使这些查询都不匹配。在这种情况下,这些条款仅用于影响分数。如果bool查询是过滤器上下文或既没有必须或过滤,那么至少有一个should查询必须匹配文档才能匹配bool查询。可以通过设置minimum_should_match参数

来明确控制此行为