Elasticsearch daterange使用两个日期字段

时间:2015-08-01 18:09:31

标签: solr elasticsearch lucene search-engine

我从客户端发送一个查询文档,其中currentDate介于所有文档附加的两个值之间。文档包含expireDateavailableDate

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

{
  "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范围不适用于复合对象或单侧范围的数组。我想我可以为每个字段添加一个全新的过滤器。有没有办法为两个字段使用一个日期范围?

1 个答案:

答案 0 :(得分:1)

表达该查询的正确方法是使用两个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"
                }
              }
            }
          ]
        }
      }
    }
  }
}