Elasticsearch7.13 使用enrich跨索引填充字段出现嵌套异常问题排查
问题根因
你的配置错误出在ingest pipeline的enrich处理器参数部分:你将target_field指定为了MagnitudeType,和earthquakes索引中原有的MagnitudeType字段重名。
enrich处理器默认会把匹配到的关联索引字段(包括匹配用的MagnitudeType、你指定要提取的MagnitudeTypeDesc)全部封装为对象,写入target_field指定的字段中,因此直接覆盖了原有的字符串类型MagnitudeType字段,形成了你看到的嵌套结构。
修复方案(推荐)
修改ingest pipeline配置,先把enrich匹配结果写入临时字段,提取出MagnitudeTypeDesc后再删除冗余的临时字段即可:
PUT /_ingest/pipeline/second_index_lookup { "processors" : [ { "enrich" : { "description": "从magnitude_type索引匹配描述字段", "policy_name": "second-index-policy", "field" : "MagnitudeType", "target_field": "tmp_magnitude_meta" } }, { "set": { "field": "MagnitudeTypeDesc", "value": "{{tmp_magnitude_meta.MagnitudeTypeDesc}}" } }, { "remove": { "field": "tmp_magnitude_meta", "ignore_failure": true } } ] }
修改后重新执行reindex即可,注意你原本需求是生成名为my_index的索引,需要把reindex请求中dest.index的值从new_index改为my_index:
POST _reindex { "source": { "index": "earthquakes" }, "dest": { "index": "my_index", "pipeline": "second_index_lookup" } }
最终生成的文档结构符合要求:
"_source" : { "MagnitudeType" : "MW", "MagnitudeTypeDesc" : "cok fena zelzele", "name" : "can" }
内容的提问来源于stack exchange,提问作者musmil
相关产品推荐
相关产品推荐

