gpt4 book ai didi

c# - Elasticsearch按日期查询返回错误结果

转载 作者:行者123 更新时间:2023-12-02 22:52:13 24 4
gpt4 key购买 nike

因此,我有一系列文档以纯Json的形式存储在NoSQL数据库(Couchbase)中。这些文档包括一个“创建的”字段,其中包含一个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;又名Zulu时间)中搜索日期/时间,也就是说,它们的末尾有一个隐式+00:00

"from" : "2014-03-27T00:00:00.0000000+00:00",
"to" : "2014-03-27T23:59:00.0000000+00:00"

GMT是用于存储日期/时间的非常标准的时区,但是看来您的文档存储在不同的时区中(它们似乎是EDT或AST的较晚时间,即 Atlantic Time Zone),即 -04:00或4小时落后于格林尼治标准时间。因此,当它是 midnight on March 27, 2014 in GMT时,它仍然是 8 PM on March 26, 2014 in AST(晚上8点是一天的第20小时)。

本质上,当您看到 -04:00时,您需要将 04:00添加到时间(即4小时0分钟)中。完成后,您可以删除时区标记,因为:
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是第二天的小时 01( 25 - 24 = 01,因此给出1天1小时;值得注意的是 24 - 24 = 00,这就是为什么 00代表午夜的原因)。

让我们回到所有问题:返回的时间应该在您的结果中,因为相对于GMT而言,它在搜索范围之内。

作为引用,EST是 -05:00,PST是 -08:00

关于c# - Elasticsearch按日期查询返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22699619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com