我正在学习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。但这是完全相反的。
能请您指出我想念的东西吗?
答案 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
格式来以日期格式表示年份。