弹性查询来搜索术语并在日期范围内

时间:2019-01-11 09:50:50

标签: elasticsearch

GET _search
{
  "query": {
    "bool":{
      "filter":{
        "and":[
        {
          "term":{
            "Server": "XYZ"
          },
          "range": {
            "DateTime":{
              "from": "2018-12-13T00:20:48.782Z",
              "to":"2018-12-14T00:20:48.782Z"
            }
          }
        }
      ]
    }}
  }
} 

上面是我的弹性查询,用于提取所有属于XYZ服务器的记录,并且在该时间范围内,我的数据集中有ServerDateTime列,但抛出以下错误:

  

{“错误”:{       “根本原因”: [         {           “ type”:“ parsing_exception”,           “ reason”:“ [字词]格式错误的查询,预期[END_OBJECT],但找到了[FIELD_NAME]”,           “行”:9           “ col”:11         }       ],       “ type”:“ parsing_exception”,       “ reason”:“ [字词]格式错误的查询,预期[END_OBJECT],但找到了[FIELD_NAME]”,       “行”:9       “ col”:11},“ status”:400}

我在这里想念什么!

3 个答案:

答案 0 :(得分:1)

您的查询格式不正确,请改用以下查询:

GET _search
{
 "query": {
   "bool": {
     "filter": [ 
      {
        "term": { 
          "Server": "XYZ"
        }
      },
      { 
        "range": {
          "DateTime":{
            "from": "2018-12-13T00:20:48.782Z",
            "to": "2018-12-14T00:20:48.782Z"
          }
        }
      }
    ]
  }
 }
}

答案 1 :(得分:1)

您的过滤器子句中不能包含and。 ES查询中没有and子句。 基本上,您需要在termrange子句上组合过滤器。请阅读combine filters in ES,以获取有关此信息的更多信息。

由于查询使用无效子句,因此ES无法解析查询。

请使用正确的查询,您应该能够从ES中获得结果。

请尝试以下查询,该查询应该可以正常运行,如果无法正常运行,请通知我。

{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "Server": "XYZ"
              }
            },
            {
              "bool": {
                "must": [
                  {
                    "range": {
                      "DateTime": {
                        "from": "2018-12-13T00:20:48.782Z",
                        "to": "2018-12-14T00:20:48.782Z"
                      }
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

答案 2 :(得分:0)

错误消息明确表明查询不正确。

您可以查看range querybool query的官方文档,以确保布尔查询中没有过滤器,范围查询中没有从头到尾的过滤器。

请检查此查询。

GET _search
{
 "query": {
   "bool": {
     "must": [ 
      {
        "term": { 
          "Server": "XYZ"
        }
      },
      { 
        "range": {
          "DateTime":{
            "gt": "2018-12-13T00:20:48.782Z",
            "lte": "2018-12-14T00:20:48.782Z"
          }
        }
      }
    ]
  }
 }
}