Elasticsearch-布尔过滤器:日期范围或字段可以为空
我正在尝试在ElasticSearch中创建一个
,以检查start_date
和end_date
与今天进行比较。如果start_date
或end_date
为null,则仍应返回结果。
例如,今天是2016-08-09。
- :起始日期:2016年8月4日END_DATE:2016年8月8日 不应该被返回
- :起始日期:2016年8月8日END_DATE:2016年8月12日 应返回
- :开始日期:null结束日期:null 应该返回
似乎无法使其与我当前的代码配合使用:
POST _search{
"query":{
"filtered": {
"query": {
"match_all": {}
},
"filter" : {
"bool": {
"must": [{
"range": {
"start_date": {"lte": "2016-08-09"}
}
},
{
"range": {
"end_date": {"gte": "2016-08-09"}
}
}],
"should": [{
"missing": {
"field": "start_date"
}
},
{
"missing": {
"field": "end_date"
}
}]
}
}
}
}
}
回答:
您可能需要这样的东西,即:
start_date
必须为null或今天之前end_date
必须为null或今天之后
修改后的查询:
POST _search{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"range": {
"start_date": {
"lte": "now"
}
}
},
{
"missing": {
"field": "start_date"
}
}
]
}
},
{
"bool": {
"should": [
{
"range": {
"end_date": {
"gte": "now"
}
}
},
{
"missing": {
"field": "end_date"
}
}
]
}
}
]
}
}
}
}
}
以上是 Elasticsearch-布尔过滤器:日期范围或字段可以为空 的全部内容, 来源链接: utcz.com/qa/408006.html