elasticsearch - 如果字段存在,Elasticsearch查询将应用范围

标签 elasticsearch elastica

我的索引具有“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"
              }
            }
          }
        }
      ]
    }
  }
}

最佳答案

万一将来有人需要它,这就是我解决的方法:

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

关于elasticsearch - 如果字段存在,Elasticsearch查询将应用范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050149/

相关文章:

ElasticSearch - 在名称中使用连字符进行搜索

elasticsearch - SearchPhaseExecutionException[无法执行阶段[查询],所有分片都失败]

elasticsearch - Elasticsearch OR查询

symfony - 在没有 ES 服务器的情况下使用 FOSElasticaBundle 对 Symfony 应用程序进行单元测试?

php - 通过Elasticsearch根据领域获得独特的结果

elasticsearch - Elasticsearch过滤的 bool 查询

elasticsearch - 一个索引的 Elasticsearch 中的多个映射

jdbc - docker input jdbc 插件中的 Logstash 未获取新行

c# - Elasticsearch :从JSON到NEST的查询,没有重复项

node.js - Elasticdump 中的“现在无法切换到旧模式”错误