使用 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 将使用 CreatedOnUtc
的 date
字段映射中指定的格式,如果没有,将使用 the default "strict_date_optional_time||epoch_millis"
format for date types,这将解析 ISO8601 日期字符串客户制作。
我想使用 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 将使用 CreatedOnUtc
的 date
字段映射中指定的格式,如果没有,将使用 the default "strict_date_optional_time||epoch_millis"
format for date types,这将解析 ISO8601 日期字符串客户制作。