ElasticSearch 将 NULL 值作为空字符串或“N/A”获取

Posted

技术标签:

【中文标题】ElasticSearch 将 NULL 值作为空字符串或“N/A”获取【英文标题】:ElasticSearch fetch NULL values as empty string or "N/A" 【发布时间】:2020-07-22 13:48:38 【问题描述】:

当我在 elasticsearch 中搜索一些文档时,使用 GET /index/_search ,我得到的文档中有一些字段为空。 例如:

"_source" : 
    "ClientReference" : null,
    "SenderMSISDN" : null,

但我希望以这样的方式将空值显示为 'N/A' 或空字符串 "" ,类似于 IFNULL() 在 sql 查询中所做的。是否可以? 我试过把映射放在下面,但这不是解决方案

"ClientReference": 
          "type": "keyword",
          "null_value": "N/A"
        ,

【问题讨论】:

【参考方案1】:

Elasticsearch 永远不会修改您正在索引的源文档的内容。

"null_value": "N/A" 所做的是,如果 ClientReference 在您的文档中为空,那么 ES 将改为索引 N/A,但源文档仍将包含 "ClientReference": null

在索引时修改源文档的唯一方法是利用ingest pipelines

例如,您可以创建这样一个管道,将 ClientReference 设置为 N/A(如果它为空)

PUT _ingest/pipeline/unnullify

  "description" : "make sure to set default values to null fields",
  "processors" : [
    
      "set" : 
        "if": "ctx.ClientReference == null",
        "field": "ClientReference",
        "value": "N/A"
      
    
  ]

那么当你索引你的文档时,你需要像这样指定管道:

PUT my-index/_doc/1?pipeline=unnullify

    "ClientReference" : null,
    "SenderMSISDN" : null,

这样做会修改源文档并将其编入索引,如下所示:


    "ClientReference" : "N/A",
    "SenderMSISDN" : null,

如果您使用 Logstash 来索引您的数据,您需要配置您的 elasticsearch 输出插件以使用摄取管道,如下所示:

output 
    elasticsearch 
        ...
        pipeline => 'unnullify'
        ...
    

【讨论】:

好的,但就我而言,我不使用 PUT 来索引,索引是通过 logstash.conf 进行的。为此,我需要在 logstash.conf 中添加任何内容吗? 谢谢你,我还没试过,如果有效会告诉你:)

以上是关于ElasticSearch 将 NULL 值作为空字符串或“N/A”获取的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:如何在 Elasticsearch 中搜索空值

Elasticsearch:如何在 Elasticsearch 中搜索空值

Elasticsearch的null values

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

Elasticsearch 空值处理实战指南

将字典值作为空值传递给 alamofire 服务 ios swift