Elasticsearch null value

24 Şub

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.