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 中搜索空值