zoukankan      html  css  js  c++  java
  • 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" 
        }
      }
    }
  • 相关阅读:
    Laravel artisan 命令工具
    WIN10安装office2003/7失败 WIN10安装office2003权限不足解决
    64windows位安装tensorflow
    Swing图层的应用——实现tooltip显示
    spring加载xml的六种方式
    ubuntu 添加右键打开方式,无法添加程序打开方式
    3.3.4 配置Tomcat的<Context>元素 (转)
    百度tn劫持解决办法
    java代理模式
    js作用域
  • 原文地址:https://www.cnblogs.com/syp172654682/p/11316896.html
Copyright © 2011-2022 走看看