我想知道如何在 C# Nest Elasticsearch 的 DateRangeQuery 类中使用 DateTimeOffset。 在我的索引中,我存储包括时区在内的日期数据,如下所示。 “2023-05-19T02:07:36.602171+00:00”
我在此类中使用的 DateMath 类似乎仅与 DateTime 兼容。 我希望能够将其与时区一起检索。
这是我的 C# 代码。
new SearchRequest<MyLog>("my_index")
{
Query = new QueryContainer(
new BoolQuery
{
Must = new QueryContainer[]
{
new DateRangeQuery
{
GreaterThanOrEqualTo = DateTimeOffset.UtcNow
LessThanOrEqualTo = DateTimeOffset.UtcNow.addHour(4)
}
}
})
};
C# 中 Elasticsearch 的 NEST 客户端不直接支持 DateRangeQuery 中的 DateTimeOffset。您可以将 DateTimeOffset 转换为
ISO 8601 format
。
new SearchRequest<MyLog>("my_index")
{
Query = new QueryContainer(
new BoolQuery
{
Must = new QueryContainer[]
{
new DateRangeQuery
{
GreaterThanOrEqualTo = DateTimeOffset.UtcNow.ToString("o"),
LessThanOrEqualTo = DateTimeOffset.UtcNow.AddHours(4).ToString("o")
}
}
})
};
在此代码中,“o”格式说明符表示往返
日期/时间模式;当此标准格式说明符与 DateTimeOffset值,它包括偏移的分和秒 在结果字符串中。
POST _bulk
{ "index" : { "_index" : "my_index", "_id" : "1" } }
{ "date" : "2023-08-07T12:07:36.602171+00:00" }
{ "index" : { "_index" : "my_index", "_id" : "2" } }
{ "date" : "2023-08-07T11:07:36.602171+00:00" }
{ "index" : { "_index" : "my_index", "_id" : "3" } }
{ "date" : "2023-05-19T04:07:36.602171+00:00" }
GET my_index/_search
{
"query": {
"range": {
"date": {
"gte": "now",
"lte": "now+4h"
}
}
}
}