过滤ElasticSearch查询,其中日期值为lte给定值或缺失

时间:2018-03-09 22:22:32

标签: elasticsearch

我需要过滤一个ES查询,其中日期字段的值是LTE给定值或字段完全丢失。这是我此时的疑问:

{
  "from":0,
  "size":50,
  "query":{
    "bool":{
      "filter":[
        {
          "term":{
            "corpusid.string.as_is":"42:6:4"
          }
        },
        {
          "nested":{
            "path":"category.object",
            "query":{
              "bool":{
                "must":[
                  {
                    "bool":{
                      "should":[
                        {
                          "range":{
                            "category.object.startdate":{
                              "lte":"2021-03-09T19:32:11.316Z"
                            }
                          }
                        },
                        {
                          "must_not":[
                            {
                              "exists":{
                                "field":"category.object.startdate"
                              }
                            }
                          ]
                        }
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

当我提交该查询时,我收到错误" [must_not]查询格式错误,查询名称后没有start_object"。我们正在运行ElasticSearch版本5.3.1以防万一。

1 个答案:

答案 0 :(得分:1)

我重构了一下查询。删除了一个必须,为must_not添加了一个bool。

{
  "from":0,
  "size":50,
  "query":{
    "bool":{
      "filter":[
        {
          "term":{
            "corpusid.string.as_is":"42:6:4"
          }
        },
        {
          "nested":{
            "path":"category.object",
            "query":{
              "bool":{
                  "should": [
                        {
                          "range":{
                            "category.object.startdate":{
                              "lte":"2021-03-09T19:32:11.316Z"
                            }
                          }
                        },
                        {
                            "bool": {
                                "must_not": {
                                    "exists": {
                                        "field": "category.object.startdate"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
          }
        }
      ]
    }
  }
}