Elasticsearch中字段为空时用替代值并存储到新字段的实现
实现Elasticsearch字段A为空时用字段B填充到字段C的方案
完全可以实现这个需求,最常用的方式是利用Elasticsearch的**索引管道(Ingest Pipeline)**在文档索引阶段完成字段赋值,以下是具体实现步骤:
1. 创建索引管道
使用coalesce处理器,它会依次取指定列表中第一个非null的值赋值给目标字段,正好匹配你的需求(优先用A,A为null则用B):
PUT _ingest/pipeline/fill_field_c { "description": "将字段C赋值为A(非null时)或B", "processors": [ { "coalesce": { "field": "C", "values": ["{{A}}", "{{B}}"] } } ] }
2. 使用管道索引文档
索引文档时指定该管道,字段C会自动被赋值:
// 当A为null时,C会取B的值 PUT your_index/_doc/1?pipeline=fill_field_c { "A": null, "B": "来自B的内容" } // 当A有值时,C会取A的值 PUT your_index/_doc/2?pipeline=fill_field_c { "A": "来自A的内容", "B": "来自B的内容" }
3. 配置默认管道(可选)
如果希望该索引下的所有文档都自动应用这个管道,可将其设置为索引的默认管道:
PUT your_index/_settings { "index.default_pipeline": "fill_field_c" }
之后索引文档无需手动指定pipeline参数,会自动处理字段C的赋值。
补充:Logstash导入场景
如果是通过Logstash向Elasticsearch导入数据,可在filter阶段用mutate插件的coalesce功能实现:
filter { mutate { coalesce => { "C" => "A" "B" } } }
内容的提问来源于stack exchange,提问作者Tisha
相关产品推荐
相关产品推荐

