Elasticsearch-布尔过滤器:日期范围或字段可以为空

我正在尝试在ElasticSearch中创建一个

,以检查start_dateend_date与今天进行比较。如果start_dateend_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

回到顶部