【问题标题】:Elasticsearch query apply range if the field exists如果字段存在,则 Elasticsearch 查询应用范围
【发布时间】:2019-09-22 14:28:12
【问题描述】:

我的索引有一个“valid_until”字段,它可以是 null 也可以是有效的日期时间。我想编写一个查询以从索引中获取所有文档并仅在“valid_until”具有有效日期时应用范围过滤器。

一些索引数据:

[
   ['name' => 'book1', 'valid_until' => '2019-09-30 18:00:00'],
   ['name' => 'book2', 'valid_until' => ''],
   ['name' => 'book3', 'valid_until' => '2019-09-20 18:00:00'],
], 

这是我尝试过的查询:

{
  "query": {
    "bool": {
      "should": [
        {
          "range": {
            "valid_until": {
              "gte": "2019-09-22 00:00:00"
            }
          }
        },
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "valid_until"
              }
            }
          }
        }
      ]
    }
  }
}

【问题讨论】:

  • 您能发布您尝试过的查询吗?
  • 也提供一些示例数据。
  • 我又更新了我的问题

标签: elasticsearch elastica


【解决方案1】:

如果将来有人需要这个,我就是这样解决的:

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "should": [
              {
                "range": {
                  "valid_until": {
                    "gte": "now"
                  }
                }
              },
              {
                "bool": {
                  "must_not": {
                    "exists": {
                      "field": "valid_until"
                    }
                  }
                }
              }
            ]
          }
        }
      ],
      "must_not": [],
      "should": [],
      "must": []
    }
  }
}

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2012-03-23
    • 2017-12-17
    相关资源
    最近更新 更多