【问题标题】:Filtering ElasticSearch query where date value is lte a given value or missing过滤日期值是给定值或缺失的 ElasticSearch 查询
【发布时间】:2018-03-10 07:37:27
【问题描述】:

我需要过滤一个 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 版以防万一。

【问题讨论】:

  • 我认为你需要另一个bool 来包装must_not

标签: elasticsearch


【解决方案1】:

我稍微重构了查询。删除了一个必须,为 must_not 添加了一个布尔值。

{
  "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"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
          }
        }
      ]
    }
  }
}

【讨论】:

  • 太棒了。谢谢!今天早上我会试一试!
猜你喜欢
  • 2021-08-03
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2023-03-25
  • 2018-02-10
  • 2015-09-08
相关资源
最近更新 更多