在 Elasticsearch 中,不重建索引就能添加或修改字段的功能主要依赖于索引映射(mapping)的动态更新能力。以下是不同版本的支持情况和操作方法:
- 动态映射(Dynamic Mapping):Elasticsearch 默认支持动态添加字段,当索引文档包含新字段时,会自动更新映射。
- 静态映射(Explicit Mapping):也可以通过
PUT /index_name/_mapping
API 手动添加新字段定义。
- 不支持直接修改字段类型:若要修改字段类型,必须重建索引(Reindex API)。
- 例外情况:
- 新增
copy_to
参数。
- 修改
index
、doc_values
等不影响存储结构的参数。
- 支持部分字段类型变更(需启用
eager_global_ordinals
):
keyword
↔ constant_keyword
integer
↔ long
↔ short
↔ byte
float
↔ double
date
↔ date_nanos
- 优先选择 Elasticsearch 8.x:支持更多字段类型的原地修改,且官方推荐使用。
- 若需兼容性:7.x 版本也能满足基本需求,但字段修改限制更多。
- 避免频繁修改映射:设计索引时尽量预定义好字段。
- 使用 Reindex API:若必须彻底变更字段类型,通过 Reindex 创建新索引。
- 测试环境验证:任何映射变更前,先在测试环境验证兼容性。
- 添加新字段:所有版本均可通过动态映射或
PUT _mapping
实现。
- 修改字段类型:7.x 版本需重建索引;8.x 版本支持部分类型的原地修改。
- 版本选择:建议使用 8.x 以获得更灵活的映射管理能力。