Elasticsearch按日期查询返回错误结果
本文关键字:错误 结果 返回 查询 日期 Elasticsearch | 更新日期: 2023-09-27 17:54:06
所以,我有一系列的文档存储为纯Json在一个NoSQL数据库(Couchbase)。这些文档包括一个"Created"字段,其中包含一个DateTime值。我正在通过Elasticsearch执行以下查询,它返回的结果是我不希望它返回的。
查询:"query":
{
"bool":
{
"must": [
{
"range":
{
"couchbaseDocument.doc.Created":
{
"from":"2014-03-27T00:00:00.0000000",
"to": "2014-03-27T23:59:00.0000000"
}
}
},
{
"term":
{
"couchbaseDocument.meta.expiration": "0"
}
}],
"must_not": [ ],
"should": [ ]
},
from: 0,
size:25000
}
我希望这个查询只返回3月27日期间创建日期的结果。然而,我从3月26日得到了一些结果。例如,它返回一个文档,其中创建了以下字段:
"Created": "2014-03-26T21:40:26.2856631-04:00"
为什么在结果集中返回这个文档?
查询的日期/时间为GMT时区(即UTC;也就是祖鲁时间),也就是说在它们的末尾有一个隐含的+00:00
。
"from" : "2014-03-27T00:00:00.0000000+00:00",
"to" : "2014-03-27T23:59:00.0000000+00:00"
GMT是一个非常标准的存储日期/时间的时区,但是看起来您的文档存储在不同的时区(它们似乎是晚EDT或AST,这是大西洋时区),这是-04:00
或比GMT晚4小时。因此,当它是midnight on March 27, 2014 in GMT
时,它仍然是8 PM on March 26, 2014 in AST
(晚上8点是一天的第20小时)。
本质上,当您看到-04:00
时,您需要将添加 04:00
到时间中,即4小时零分钟。完成后,您可以删除时区标记,因为:
2014-03-26T21:40:26.2856631-04:00
与
相同2014-03-27T01:40:26.2856631+00:00
与
相同2014-03-27T01:40:26.2856631
因为21 + 04 = 25
,并且一天的25
小时是下一个天(25 - 24 = 01
)的01
小时,因此给出1天1小时;值得注意的是,24 - 24 = 00
,这就是为什么00
代表午夜)。
回到这个问题:返回的时间应该在你的结果中,因为相对于GMT,它在你的搜索范围内。
为参考,EST为-05:00
, PST为-08:00
。