如何在Elasticsearch中创建范围过滤器?

时间:2018-07-23 11:38:57

标签: elasticsearch

我必须创建一个查询,以提取字段startTime为2017年,然后为2018年的对象。

这是startTime的格式:

"startTime": "2017-06-11T08:00:00",

我写的查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "startTime": {
              "gte": "2017",
              "lt": "2018"
            }
          }
        }
      ]
    }
  }
}

是的,它返回在2017年具有startTime的对象,但是如果我这样做了:

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "startTime": {
              "gte": "2018",
              "lt": "2019"
            }
          }
        }
      ]
    }
  }
}

它还会返回2017年以来的对象。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先请确保该字段实际上是type Date的字段。

如果问题仍然存在,Elastic允许您指定date-format for the query。在您的示例中添加yyyy格式,结果如下:

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "startTime": {
              "gte": "2018",
              "lt": "2019",
              "format": "yyyy"
            }
          }
        }
      ]
    }
  }
}