如何在es中查询null值

1、背景

在我们向es中写入数据时,有些时候数据写入到es中的是null,或者没有写入这个字段,那么这个时候在es中该如何查询出这种为null的数据呢?

2、需求

假设我们的mapping存在 如下2个字段nameaddress,其中 namekeyword类型且使用了null_value来处理null值,address字段是text类型。

我们插入数据时,存在nameaddress字段都不存在的,存在nameaddress[]null的数据,我们需要查询出来这些数据。

3、准备数据

3.1 创建mapping

PUT /index_null_value
{
  "mappings": {
    "properties": {
      "name":{
        "type": "keyword",
        "null_value": "--"
      },
      "address":{
        "type": "text"
      },
      "age":{
        "type": "integer",
        "null_value": "-1"
      }
    }
  }
}

注意:

  1. 1. null_value 需要和字段的 类型值 保持一致,比如上方的ageinteger类型,那么null_value的值就必须是integer类型

  2. 2. null_value 不会修改 _source中的值

  3. 3. []空数组是不会被null_value替换的,因为[]中不包含明确的null

  4. 4. null_value可以修饰的数据类型有限,比如text类型不可使用。

    如何在es中查询null值
    null_value注意事项

3.2 插入数据

PUT /index_null_value/_bulk
{"index":{"_id":0}}
{"age":10}
{"index":{"_id":1}}
{"name":null,"address": null,"age":10}
{"index":{"_id":2}}
{"name":[],"address":[],"age":20}
{"index":{"_id":3}}
{"name":[null],"address":[null],"age":60}
{"index":{"_id":4}}
{"name":[null,"123"],"address":[null,"123"],"age":70}
{"index":{"_id":5}}
{"name":["123",null],"address":["123",null],"age":80}
{"index":{"_id":6}}
{"name":["123","456"],"address":["123","456"],"age":90}
  1. 1. 数据中存在 name和 address字段都不存在的

  2. 2. 数据中存在 name和 address字段 是 [] 的

  3. 3. 数据中存在 name和 address字段 是 [null] 的

  4. 4. 数据中存在 name和 address字段 都有值的

4、查询 name字段为null的数据

如何在es中查询null值
查询name字段为null的数据

5、查询address不存在或值直接为null的数据

如何在es中查询null值
查询address不存在或值直接为null的数据
如何在es中查询null值
boolean exists

6、参考链接

1、https://www.elastic.co/guide/en/elasticsearch/reference/8.6/null-value.html 2、https://www.elastic.co/guide/en/elasticsearch/reference/8.6/query-dsl-exists-query.html


原文始发于微信公众号(huan1993的编程coding):如何在es中查询null值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207431.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!