1.背景当我们往es中写入数据的时候,有时候写入es中的数据是null,或者这个字段没有写入,那么这时候在es中应该怎么办呢?查询出这种空数据怎么办?2.需求假设我们的映射有如下两个字段name和address,其中name为关键字类型,使用null_value处理空值,address字段为文本类型。我们插入数据的时候,有些数据的name和address字段不存在,name和address都是[]或者null。我们需要查询这些数据。3、准备数据3.1创建mappingPUT/index_null_value{"mappings":{"properties":{"name":{"type":"keyword","null_value":"--"},"address":{"type":"text"},"age":{"type":"integer","null_value":"-1"}}}}注意:null_value需要和字段的type值保持一致,例如,上面的age是整数类型,那么null_value的值必须是整数类型。null_value不会修改_source中的值。[]空数组不会被null_value替换,因为[]不包含显式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"],"地址":[null,"123"],"年龄":70}{"索引":{"_id":5}}{"姓名":["123",null],"地址":["123",null],"年龄":80}{"索引":{"_id":6}}{"姓名":["123","456"],"地址":["123","456"],"age":90}数据中有姓名和地址字段,数据中不存在数据中有姓名和地址字段是[]有姓名和数据中为[null]的地址字段数据中有name和aaddress字段有值4.查询name字段为null的数据5.查询address不存在或者value直接为null的数据6.参考链接1,https://www.elastic.co/guide/en/elasticsearch/reference/8.6/null-value.html2,https://www.elastic.co/guide/en/elasticsearch/reference/8.6/query-dsl-exists-query.html
