首页 > 解决方案 > elasticsearch 查询的问题,范围格式错误的查询,预期 END_OBJECT 但找到 FIELD_NAME

问题描述

我无法弄清楚这个查询有什么问题。“范围”和“存在”都独立工作,但在一起我得到parsing expectionand range malformed query, expected END_OBJECT but found FIELD_NAME。有人能弄清楚这个查询有什么问题吗?

{
"query": {
  "range":{
     "@timestamp":{
        "gte":"2019-08-04T11:00:00",
        "lt":"2019-10-04T12:00:00"
     }
  },
  "exists": {
      "field": "params.zone"
  }  

},
"_source": ["@timestamp", "params.zone"]
}

标签: elasticsearch

解决方案


如果您想像您正在使用的那样组合多个查询,range并且exists您需要使用bool 查询并确定您的哪些子句是强制性的(must)、可选的(should)、过滤器(filter),或者不应该出现在结果中(must_not

可行的查询可能如下所示(在此示例中,您的子句是强制性的):

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "@timestamp": {
              "gte": "2019-08-04T11:00:00",
              "lt": "2019-10-04T12:00:00"
            }
          }
        },
        {
          "exists": {
            "field": "params.zone"
          }
        }
      ]
    }
  },
  "_source": [
    "@timestamp",
    "params.zone"
  ]
}

推荐阅读