Elasticsearch - EXISTS语法+过滤器不起作用

时间:2017-07-26 14:36:02

标签: elasticsearch

我正在尝试查询特定字段存在的日期范围。这似乎很容易,但我感觉关键字"存在"已根据文档进行了更改。我在5.4。 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/query-dsl-exists-filter.html

我使用@timestamp作为日期和字段" error_data"在映射中,只有在找到错误条件时才会出现。

这是我的询问....

GET /filebeat-2017.07.25/_search
{
    "query": {
        "bool" : {
          "filter" : {
            "range" : {
                "@timestamp" : {
                    "gte" : "now-5m",
                    "lte" : "now-1m"
                }
            }
          },
          "exists": {
          "field": "error_data"
          }
        }
    }
}

但它表示" [bool]查询不支持[exists]"而以下不起作用,但得到解析错误消息" [存在]格式错误的查询,预期[END_OBJECT]但找到[FIELD_NAME]"在第6行第9栏。感谢您的帮助。

GET /filebeat-2017.07.25/_search
{
    "query": {
        "exists": {
          "field": "error_data"
        }, 
        "bool" : {
          "filter" : {
            "range" : {
                "@timestamp" : {
                    "gte" : "now-5m",
                    "lte" : "now-1m"
                }
            }
          }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你快到了。试试这样:

GET /filebeat-2017.07.25/_search
{
    "query": {
        "bool" : {
          "filter" : [
            {
              "range" : {
                "@timestamp" : {
                    "gte" : "now-5m",
                    "lte" : "now-1m"
                }
              }
            },
            {
              "exists": {
                "field": "error_data"
              }
            }
          ]
        }
    }
}

即。如果您有几个要放入的子句,bool/filter子句必须是数组: