Elasticsearch的null values

Posted syp172654682

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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" 
    
  

 

以上是关于Elasticsearch的null values的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:如何在 Elasticsearch 中搜索空值

Elasticsearch:如何在 Elasticsearch 中搜索空值

为什么不建议给MySQL设置Null值?《死磕MySQL系列 十八》

Elasticsearch 空值处理实战指南

为什么不建议给MySQL设置Null值?《死磕MySQL系列 十八》

Elasticsearch之使用RestClient实现null和非null的查询操作