使用两个日期字段的 Elasticsearch 日期范围

Elasticsearch daterange using two date fields

我从客户端发送一个文档查询,其中 currentDate 介于附加到所有文档的两个值之间。文档有一个 expireDate 和一个 availableDate.

如何制定此查询?作为一个猜测,我想出了以下,这是行不通的:

{
  "constant_score": {
    "filter": {
      "range" : {
        "expiredate" : {
          "lte": "2015-08-15T11:28:45.114-07:00"
        },
        "availabledate" : {
          "gte": "2015-08-11T11:28:45.114-07:00"
        }
      }
    }
  }
}

这甚至看起来是错误的,因为 afaik 范围不适用于复合对象或单边范围数组。我想我可以为每个字段添加一个全新的过滤器。有没有办法对两个字段使用一个日期范围?

表达该查询的正确方法是使用两个 range 过滤器(每个日期字段一个)并将它们放在另一个 bool/must 过滤器中。

{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "expireDate": {
                  "lte": "2015-08-15T11:28:45.114-07:00"
                }
              }
            },
            {
              "range": {
                "availabledate": {
                  "gte": "2015-08-11T11:28:45.114-07:00"
                }
              }
            }
          ]
        }
      }
    }
  }
}