Elasticsearch的null values


很多時候,我們需要面臨null值的煩擾,查詢es時傳入null值是要查詢出null的數據還是不查這個field呢,稍有不慎就會引發新的bug,這的確是個問題!

null_value 意味着無法索引或搜索空值。當字段設置為 null , [] ,和 [null] (這些null的表示形式都是等價的),它被視為該字段沒有值。

null_value 意味着它將不會被表示為一個反向索引數據結構,它們根本不存在於反向索引中,故搜索也就無任何意義了。

難道就搜索沒有辦法了嗎?

es為我們提供了missing查詢,代表缺少字段或null值,但在6.x版本已經移除。取而代之的是exists查詢,它的語義相當於SQL 中的 column is not null(有值)。它們都屬於聚合操作。

顯然,這個世界並不簡單,數據常常缺少字段,或者包含顯式的空或空數組。為了處理這些情況,es 給我們推薦了一些辦法可以處理空值或缺少的值。

幸運的是,es 可以設置一個選項,用我們選擇的占位符值替換顯式的空值(當為字符串、數字、布爾值或日期字段指定映射時設置),當insert/update數據遇到空值時,將使用該值,這個顯式的空值會對其進行索引,以便於搜索。

選擇合適的空值時,請確保:

它與字段的類型匹配。在日期類型的字段中不能使用字符串空值
它不同於字段可能包含的正常值,以避免將實值與空值混淆

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "status_code": {
          "type":       "keyword",
          "null_value": "NULL" 
        }
      }
    }
  }
}

PUT my_index/_doc/1
{
  "status_code": null
}

PUT my_index/_doc/2
{
  "status_code": [] 
}

GET my_index/_search
{
  "query": {
    "term": {
      "status_code": "NULL" 
    }
  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM