自学内容网 自学内容网

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)!