一尘不染

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

elasticsearch

我正在尝试在ElasticSearch中创建一个 布尔过滤器
,以检查start_dateend_date与今天进行比较。如果start_dateend_date为null,则仍应返回结果。

例如,今天是2016-08-09。

  • 项目1 :起始日期:2016年8月4日END_DATE:2016年8月8日 不应该被返回
  • 项目2 :起始日期:2016年8月8日END_DATE:2016年8月12日 应返回
  • 项目3 :开始日期: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"      
                    }
                }]
            }
        }
    }
}
}

阅读 408

收藏
2020-06-22

共1个答案

一尘不染

您可能需要这样的东西,即:

  • 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"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  }
}
2020-06-22