动态映射关闭时,如何为_source已有字段新增索引及原地重索引?
Elasticsearch动态映射关闭时新增字段索引的解决方案
最佳实现方式
当动态映射设为false时,无法直接在原索引中为_source已存在的字段新增映射或开启索引——Elasticsearch不允许对现有索引直接添加新的可索引字段(仅少数特殊场景如新增text类型的keyword子字段除外)。最稳妥的方案是通过重索引到新索引,具体步骤如下:
- 创建新索引,在映射中配置好需要新增索引的目标字段,同时保留原索引的所有已有映射配置,动态映射仍设为
false。 - 调用
_reindexAPI完成数据迁移:POST _reindex { "source": { "index": "your-old-index" }, "dest": { "index": "your-new-index" } } - 验证新索引的映射和数据无误后,将业务流量切换至新索引,按需删除原索引。
原地重索引的可行性说明
Elasticsearch不支持原地重索引并更新映射,原因如下:
- 索引的核心映射结构(尤其是字段的可索引属性)一旦创建就无法修改——倒排索引的不可变性决定了无法直接调整已有数据的索引结构。
- 即便临时开启动态映射,也只会对新写入的文档生效,无法为已存在于
_source的字段自动生成索引;动态映射关闭状态下,直接添加字段映射的请求会被Elasticsearch拒绝。
因此,没有办法在原索引内完成字段索引的新增操作,必须通过新索引重索引的方式实现。
内容的提问来源于stack exchange,提问作者Rajesh Kumar
相关产品推荐
相关产品推荐

