请参阅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"
}
}
}
答案 0 :(得分:1)
我认为这仅仅是一个教学示例,表明可以添加两个选项。实际上,查询是正确且有效的,Elasticsearch将使用外部限制(lte
和gte
位),它将"翻译"查询这个Lucene的一个:
description:[2015-06-06T12:01:02.123||/M TO now]^1.1