elasticsearch - 查找字段不存在或字段小于值的文档

标签 elasticsearch elasticsearch-6

我有一些员工,正在寻找那些没有输入生日或生日早于1963-03-01的人。我有:

GET employees/_search
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "birthday"
        }
      },
      "filter": {
        "range": {"birthday": {"lte": 19630301}}
      }
    }
  }
}

现在我有250名员工,没有一个生日字段,但是此查询返回0个结果。

最佳答案

您可以对此进行bool查询,并应出现。

第一个子句可以应用不带生日字段的文档检查,而第二个子句可以根据给定范围过滤文档。

使用should查询将充当逻辑OR运算符,并检索两者之一。

{
  "query": {
    "bool": {
      "should": [
        {
           "bool": { 
              "must_not": [{ "exists": { "field": "birthday" } }]
           }
        },
        {
           "bool": {
              "filter": [{ "range": {"birthday": { "lte": 19630301 }} }]
           }
        }
      ]
    }
  }
}

由于并非针对过滤器计算得分,因此您可能希望所有得分保持一致。您可以选择使用Constant Score Query,也可以在生日过滤的子句上添加一个附加查询,该查询使第一个子句中的must_not相反,如下所示:
{
  "query": {
    "bool": {
      "should": [
        {
           "bool": { 
              "must_not": [{ "exists": { "field": "birthday" } }]
           }
        },
        {
           "bool": {
              "must": [{ "exists": { "field": "birthday" } }],
              "filter": [{ "range": {"birthday": { "lte": 19630301 }} }]
           }
        }
      ]
    }
  }
} 

关于elasticsearch - 查找字段不存在或字段小于值的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402225/

相关文章:

json - 将在Elasticsearch中使用的Json文件

elasticsearch - 使用Spring Data Elasticsearch设置不同的_id和id字段

elasticsearch - 单词开头的Elasticsearch multi_match

http - 如何将 JSON 文件导入 ElasticSearch 6.x?

elasticsearch - 查询包含嵌套数组 Elasticsearch 中所有值的文档

elasticsearch - 您如何在 ElasticSearch 内联脚本中使用 min/max?

elasticsearch - 使用动态模板时Elasticsearch映射异常

elasticsearch - Elasticsearch 6.2:关键字搜索时,术语查询需要小写输入

elasticsearch - 使用Java API索引文档时未知主机异常(RestHighLevelClient)Elasticsearch

elasticsearch - 带有传递参数的Elasticsearch sql查询我们是否防止sql注入(inject)