Elasticsearch日期范围问题

时间:2019-07-01 18:34:13

标签: elasticsearch

我正在学习Elasticsearch,但日期范围查询有问题。我的查询只比较几天,而不是整个日期。这是一个简短的示例:

DELETE test

PUT /test
{
  "mappings": {
      "properties": {
        "date" : {
          "type": "date",
          "format": "dd MM YYYY"
        }
      }

  }
}

POST /_bulk
{"index" : {"_index": "test"}}
{"date": "01 01 2001"}

POST /test/_search
{
  "query": {
    "range": {
      "date": {
        "lt": "01 01 2016",
        "gt": "01 01 2000"
      }
    }
  }
}

POST /test/_search
{
  "query": {
    "range": {
      "date": {
        "lte": "01 01 2000",
        "gte": "01 01 2016"
      }
    }
  }
}

根据我的理解,第一个搜索查询应返回文档-日期2001为<2016和>2000。第二个查询应不返回任何内容,因为2001不是<= 2000和> = 2016。但这是完全相反的。

能请您指出我想念的东西吗?

1 个答案:

答案 0 :(得分:2)

失败的原因是因为ES无法正确格式化您的日期。日期格式化行为在6.x和7.0以及joda based date formatters are replaced with java ones之间更改。如果将格式更改为"format": "dd MM yyyy"(请注意小写的yyyy),则会发现您的搜索作品。

格式不起作用的原因是YYYY表示date week year。您几乎总是希望使用小写的yyyy格式来以日期格式表示年份。