前言
我们都知道,在ES中一旦声明了字段名称,就不能对字段名称进行修改了。只能新增字段,不能删除、修改已经声明的mapping字段。
那么,如果我们需要修改mapping中的字段名称,需要怎么操作呢?
一、分析
不能直接修改原索引中的mapping字段,那么只能在新索引中重命名索引字段,然后将数据导入到新索引。
而ES中重建索引命令_reindex正好能很好的支持这一点。
官网说明:docs-reindex-change-name
二、实战
1、创建索引test并插入数据
POST test/_doc/1?refresh { "text": "words words", "flag": "foo" }
2、通过reindex重命名字段名称
说明:
将原索引test中的字段flag重命名为tag
POST _reindex { "source": { "index": "test" }, "dest": { "index": "test2" }, "script": { "source": "ctx._source.tag = ctx._source.remove(\"flag\")" } }
3、查看结果
##根据id查看记录 GET test2/_doc/1 ## 返回结果 { "found": true, "_id": "1", "_index": "test2", "_type": "_doc", "_version": 1, "_seq_no": 44, "_primary_term": 1, "_source": { "text": "words words", "tag": "foo" } }
总结
本文主要介绍如何通过索引重建reindex+script脚本实现修改索引字段名称。