如何在 C# Nest Elasticsearch 中按 DateTimeOffset 进行搜索?

问题描述 投票:0回答:1

我想知道如何在 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
1个回答
0
投票

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"
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.