Elasticsearch 重建索引&数据迁移
文章目录
1.前言
- ES 索引不支持直接修改某个字段类型,如果该索引中已经存在数据。
- 如果要修改字段类型,只能通过重建索引+数据迁移的方式来实现该效果。
2.步骤
2.1 操作流程图
2.2 具体步骤
注意下面的步骤,前提
- 相关的写 ES 业务逻辑已经停止
- 否则一直有数据写入的话,无法执行下面操作
2.2.1 新建临时索引
获取旧索引的 Mapping 和 Settings:
GET /old_index/_mapping
GET /old_index/_settings
创建新索引:
PUT /new_tmp_index
{
"settings": {
// 复制旧索引的设置,并根据需要进行修改
},
"mappings": {
// 复制旧索引的mapping,并根据需要进行修改
}
}
其中 settings 中有些信息需要删除掉,根据创建索引时报错提示信息来操作即可
比如如下信息需要删除
"provided_name": "old_index",
"creation_date": "1725618688486",
"uuid": "85ZDMiQmQsSzBFVLSeu6Xg",
"version": {
"created": "8070199"
}
mappings 根据新字段的类型需求进行修改
2.2.2 数据迁移
POST /_reindex
{
"source": {
"index": "old_index" // 旧索引名称
},
"dest": {
"index": "new_tmp_index" // 新索引名称
}
}
这个过程是异步的,需要通过查看页面来判断数据是否迁移完成
Index Management 页面,搜索两个索引,比较数量和大小,当数据一直时,表示迁移完成
2.2.3 清理旧索引数据
POST /old_index/_delete_by_query
{
"query": {
"match_all": {}
}
}
2.2.4 修改旧索引字段类型
修改 mappings 对应的字段
PUT old_index/_mapping
{
"properties": {
"test1": {
"type": "keyword"
},
"test2": {
"type": "keyword"
},
"test3": {
"type": "keyword"
}
}
}
2.2.5 再将新临时索引的数据签回到旧索引中
POST /_reindex
{
"source": {
"index": "new_tmp_index" // 新索引名称
},
"dest": {
"index": "old_index" // 旧索引名称
}
}
做完这一步,其实已经达到了我们要的效果
同样这个过程是异步的,需要通过查看页面来判断数据是否迁移完成
Index Management 页面,搜索两个索引,比较数量和大小,当数据一直时,表示迁移完成
2.2.6 最后删除新临时索引
Index Management 页面找到新建的临时索引,点击名称超链接,再点击右下角的【Manage】按钮,Delete index 可以删除索引
原文地址:https://blog.csdn.net/xiewenfeng520/article/details/143762991
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!