在此日期范围查询示例中我们可以期待什么?

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 将使用外部限制(ltegte 位)并且它将 "translate" 查询到这个 Lucene 中:

description:[2015-06-06T12:01:02.123||/M TO now]^1.1