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