ElasticSearch不适用于日期的utils范围

时间:2016-04-29 13:18:56

标签: elasticsearch

我正在使用ElasticSearch,而我的查询并不是在寻找我想要的信息。

{
    "query": 
    {
        "bool": 
        {
            "must": 
            [
                {
                    "range": 
                    {
                       "date": 
                       {
                           "gte": "2016-04-29 00:00:01",
                           "lte": "2016-04-29 23:59:59"
                       }
                    }
                }
            ]
        }
    }
}

结果是所有日期都可能,因此,就像查询不存在一样。

POST /Test/date
{
     "date": "2016-04-28 13:43:14"
}

我跑的那天不同,所以我也跑了

POST /Test/date
{
     "date": "2016-04-29 13:43:14"
}

POST /Test/date
{
     "date": "2016-04-30 13:43:14"
}

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

我想知道这是因为您的时间戳格式不正确。你可以改变:

  • 2016-04-29 00:00:01

要:

  • 2016-04-29T00:00:01

答案 1 :(得分:0)

这应该有效。基本上,您需要自定义日期格式,否则ES会创建string字段,而不是date字段,因为它不会识别格式。

DELETE test

PUT /test
{
  "mappings": {
    "date": {
      "properties": {
        "date": {
          "type": "date",
          "format": "yyyy-mm-dd HH:mm:ss"
        }
      }
    }
  }
}

POST /test/date
{
  "date": "2016-04-28 13:43:14"
}
POST /test/date
{
  "date": "2016-04-29 13:43:14"
}
POST /test/date
{
  "date": "2016-04-30 13:43:14"
}

GET /test/date/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "date": {
              "gte": "2016-04-29 00:00:01",
              "lte": "2016-04-29 23:59:59"
            }
          }
        }
      ]
    }
  }
}