使用 NEST 的日期范围搜索没有 return 数据

Date Range search using NEST doesn't return data

我想使用 NEST 在 Elasticsearch 中使用日期范围搜索 API。

当我像这样搜索时它很有效:

                        .DateRange(c => c
                            .Name("myquery")
                            .Boost(1.1)
                            .Field(p => p.CreatedOnUtc)
                            .GreaterThanOrEquals(DateMath.Now.Subtract("3d")) //this works fine
                            .LessThanOrEquals(DateMath.Now)
                            .Format("dd/MM/yyyy||yyyy")
                            .TimeZone("+01:00")
                            )

Bu 当我想使用我的自定义 fromDate 日期时间值而不是 DateMath.Now.Subtract("3d") 它不会return 什么都没有!

我尝试了以下许多不同的代码行,但其中 none 行有效!

.GreaterThan(DateMath.Anchored(fromDate))

.GreaterThanOrEquals(DateMath.Anchored(fromDate).RoundTo(DateMathTimeUnit.Day))

.GreaterThan(new DateTime(2012, 01, 01, 11, 0, 0))

返回的示例 json 我提交的日期时间值是:

"createdOnUtc": "2020-04-08T15:53:36.4800870Z"

我在 Elasticsearch 网站上发现相关的 documentation/samplequery 位于 here 但它对我没有帮助,这里我从文档中复制对象初始化语法示例:

new DateRangeQuery
{
    Name = "named_query",
    Boost = 1.1,
    Field = "description",
    GreaterThan = FixedDate,
    GreaterThanOrEqualTo = DateMath.Anchored(FixedDate).RoundTo(DateMathTimeUnit.Month),
    LessThan = "01/01/2012",
    LessThanOrEqualTo = DateMath.Now,
    TimeZone = "+01:00",
    Format = "dd/MM/yyyy||yyyy"
}

问题与 Format/TimeZone 相关还是我在这里遗漏了什么?

当在请求中指定 Format = "dd/MM/yyyy||yyyy" 时,Elasticsearch 期望接收其中一种格式的 DateTime 字符串,并将使用提供的格式尝试将 DateTime 字符串解析为有效实例Elasticsearch 中的 DateTime。

DateMath.Anchored(fromDate)

new DateTime(2012, 01, 01, 11, 0, 0)

客户端会 serialize these to an ISO8601 DateTime string representations,因此这些值的输入与请求中提供的格式不匹配。

查看上面的第一个示例,您似乎不需要为 Format 指定值。当没有指定格式时,Elasticsearch 将使用 CreatedOnUtcdate 字段映射中指定的格式,如果没有,将使用 the default "strict_date_optional_time||epoch_millis" format for date types,这将解析 ISO8601 日期字符串客户制作。