1、背景
在咱们向es
中写入数据时,有些时候数据写入到es
中的是null
,或者没有写入这个字段,那么这个时候在es
中该如何查问出这种为null的数据呢?
2、需要
假如咱们的mapping
存在 如下2个字段name
和address
,其中 name
是keyword
类型且应用了null_value
来解决null
值,address
字段是text
类型。
咱们插入数据时,存在name
和address
字段都不存在的,存在name
和address
是[]
或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" } } }}
留神:
null_value
须要和字段的 类型值 保持一致,比方上方的age
是integer
类型,那么null_value
的值就必须是integer类型
。null_value
不会批改_source
中的值[]
空数组是不会被null_value
替换的,因为[]
中不蕴含明确的null
null_value
能够润饰的数据类型无限,比方text
类型不可应用。
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}
- 数据中存在
name
和address
字段都不存在的 - 数据中存在
name
和address
字段 是 [] 的 - 数据中存在
name
和address
字段 是 [null] 的 - 数据中存在
name
和address
字段 都有值的
4、查问 name
字段为null的数据
5、查问address
不存在或值间接为null的数据
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