0
点赞
收藏
分享

微信扫一扫

如何在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. null_value 需要和字段的 类型值 保持一致,比如上方的ageinteger类型,那么null_value的值就必须是integer类型
  2. null_value 不会修改 _source中的值
  3. []空数组是不会被null_value替换的,因为[]中不包含明确的null
  4. null_value可以修饰的数据类型有限,比如text类型不可使用。 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. 数据中存在 nameaddress字段都不存在的
  2. 数据中存在 nameaddress字段 是 [] 的
  3. 数据中存在 nameaddress字段 是 [null] 的
  4. 数据中存在 nameaddress字段 都有值的

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

查询name字段为null的数据

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

查询address不存在或值直接为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

举报

相关推荐

0 条评论