Elasticsearch üzerinde null değerler index üzerine eklenemez ve aranamaz. Yani property değeri null olan kayıtları getirmek için bir sorgu yazdığınızda doğru cevap alınamaz. Bir alan null olarak girildiğinde, o alanın değeri yokmuş gibi değerlendirilir. Bir alan boş bir dizi olarak girildiğinde de yokmuş gibi değerlendirilir.
Örneğin, aşağıdaki sorguda, name değeri null olan kayıtlar alınamaz.
GET products-idx/_search
{
"query": {
"term": {
"name": null
}
}
}
Bu gibi durumlarda, index mapping oluşturulurken, alana ait property ayarlarında null_value parametresi ile null yerine bir değer atanır.
PUT products-idx
{
"mappings": {
"properties": {
"name": {
"type": "keyword",
"null_value": "NULL"
}
}
}
}
Burada, null olarak gelen name değerleri, “NULL” ile değiştirilmiştir. Bu sayede NULL şeklinde arama yapmak mümkün hale gelmektedir. Aşağıdaki şekilde yeni değerler eklendiğinde;
PUT products-idx/_doc/1
{
"name": null
}
PUT products-idx/_doc/1
{
"name": []
}
Artık aşağıdaki gibi arama yapılabilmektedir.
GET products-idx/_search
{
"query": {
"term": {
"name": "NULL"
}
}
}
Boş diziler null değere sahip olmadığı için “NULL” ile değiştirilmez. Bu sorgunun sonucunda 1 numaralı doküman elde edilir ancak 2 numaralı doküman elde edilemez.
Not: null_value değeri alan veri tipi ile uygun olmalıdır. Örneğin long tipinde bir alana string tipinde null_value değeri atanamaz.
Not: null_value yalnızca verilerin index’e alınma şeklini etkiler, _source dokümanını değiştirmez.