# 修改映射

URL: https://caijiao.org/elasticsearch/02.basic/05.index-mapping-update
Source: docs/elasticsearch/02.basic/05.index-mapping-update.md
Description: 本章讲解 Elasticsearch 中映射（mapping）的修改方法，包含动态添加字段和通过重建索引实现映射变更的最佳实践。

在 Elasticsearch 中，映射（mapping）定义了索引中字段的数据类型和行为。由于映射设计对数据结构和查询性能影响较大，修改映射需谨慎操作。

## 1. 动态添加字段

Elasticsearch 支持在已有索引中动态添加新字段，但不支持修改已存在字段的类型。

示例：为索引添加新字段

```json
PUT /my-index/_mapping
{
  "properties": {
    "new_field": {
      "type": "text"
    }
  }
}
````

## 2. 不支持修改的情况

* 不能更改字段的数据类型（如将 `text` 改为 `keyword`）
* 不能删除已存在字段
* 不能更改字段的分析器（analyzer）

## 3. 修改映射的推荐方法：重建索引

当需要更改字段类型或映射结构时，通常采用重建索引的方法：

1. 创建一个新的索引，定义新的映射结构
2. 使用 `_reindex` API 将旧索引的数据复制到新索引
3. 删除旧索引，重命名新索引（或更新应用配置指向新索引）

示例重建索引：

```json
POST _reindex
{
  "source": {
    "index": "old-index"
  },
  "dest": {
    "index": "new-index"
  }
}
```

## 4. 注意事项

* 修改映射时，尽量避免生产环境在线修改导致查询异常
* 使用重建索引方法时，注意数据同步及停机时间规划
* 版本升级时，映射策略可能会有所不同，需参考官方文档

---

合理管理映射的修改流程，有助于保持索引数据结构的稳定和系统的高效运行。
