在此日期范围查询示例中我们可以期待什么?
What can we expect in this date range query example?
参考ElasticSearch example,我很难理解它有两个日期范围(gt/lt和gte/lte)在一个查询中。
为什么它提供两个日期范围,当我们仅使用 gt/lt 或 gte/lte 时会有什么不同?
流畅的 DSL 示例
q
.DateRange(c => c
.Name("named_query")
.Boost(1.1)
.Field(p => p.Description)
.GreaterThan(FixedDate)
.GreaterThanOrEquals(DateMath.Anchored(FixedDate).RoundTo(TimeUnit.Month))
.LessThan("01/01/2012")
.LessThanOrEquals(DateMath.Now)
.Format("dd/MM/yyyy||yyyy")
.TimeZone("+01:00")
)
示例 json 输出。
{
"range": {
"description": {
"_name": "named_query",
"boost": 1.1,
"format": "dd/MM/yyyy||yyyy",
"gt": "2015-06-06T12:01:02.123",
"gte": "2015-06-06T12:01:02.123||/M",
"lt": "01/01/2012",
"lte": "now",
"time_zone": "+01:00"
}
}
}
我认为这只是一个教学示例,表明可以添加这两个选项。实际上,查询是正确且有效的,Elasticsearch 将使用外部限制(lte
和 gte
位)并且它将 "translate" 查询到这个 Lucene 中:
description:[2015-06-06T12:01:02.123||/M TO now]^1.1
参考ElasticSearch example,我很难理解它有两个日期范围(gt/lt和gte/lte)在一个查询中。
为什么它提供两个日期范围,当我们仅使用 gt/lt 或 gte/lte 时会有什么不同?
流畅的 DSL 示例
q
.DateRange(c => c
.Name("named_query")
.Boost(1.1)
.Field(p => p.Description)
.GreaterThan(FixedDate)
.GreaterThanOrEquals(DateMath.Anchored(FixedDate).RoundTo(TimeUnit.Month))
.LessThan("01/01/2012")
.LessThanOrEquals(DateMath.Now)
.Format("dd/MM/yyyy||yyyy")
.TimeZone("+01:00")
)
示例 json 输出。
{
"range": {
"description": {
"_name": "named_query",
"boost": 1.1,
"format": "dd/MM/yyyy||yyyy",
"gt": "2015-06-06T12:01:02.123",
"gte": "2015-06-06T12:01:02.123||/M",
"lt": "01/01/2012",
"lte": "now",
"time_zone": "+01:00"
}
}
}
我认为这只是一个教学示例,表明可以添加这两个选项。实际上,查询是正确且有效的,Elasticsearch 将使用外部限制(lte
和 gte
位)并且它将 "translate" 查询到这个 Lucene 中:
description:[2015-06-06T12:01:02.123||/M TO now]^1.1