使用两个日期字段的 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"
}
}
}
]
}
}
}
}
}
我从客户端发送一个文档查询,其中 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"
}
}
}
]
}
}
}
}
}