ElasticSearch 数据迁移方案

16 篇文章 0 订阅

(一个人不论赋有什么样的棋,他如果不知道自己有这种棋,并且不形成适合于自己棋的计划,那种棋对他便完全无用。——休漠)

在这里插入图片描述
ElasticSearch 常用api

ElasticSearch 版本说明

{
“name”: “node-3”,
“cluster_name”: “test-elasticsearch”,
“cluster_uuid”: “FM6vTooBTS6cSM9scMEU7g”,
“version”: {
“number”: “2.4.1”,
“build_hash”: “c67dc32e24162035d18d6fe1e952c4cbcbe79d16”,
“build_timestamp”: “2016-09-27T18:57:55Z”,
“build_snapshot”: false,
“lucene_version”: “5.5.2”
},
“tagline”: “You Know, for Search”
}

ElasticSearch 数据迁移方案

ElasticSearch 数据迁移方式

有以下三种方式可以更新索引结构映射和设置

  • 更新索引结构设置
    因为自定义字段的key是未知的,无法显示的设置在mappings中。所以可以在settings中设置默认的分词器和过滤器等配置

  • 更新索引结构映射
    因为非自定义字段的key是已知的,可以显示的设置在mappings中

  • 索引重建
    避免影响旧索引数据,方便回滚,可以通过此方式安全的迁移数据到新索引,业务再使用该新索引即可
    es默认滚动批次requests_per_second为1000

更新索引结构设置的数据迁移

优点:不需要数据迁移,直接更新索引设置就可以完成更新
缺点:只能对未设置过的字段进行更新,一次性操作,风险高。如果设置后数据检索等出了问题,就不能回滚了

操作步骤

  • 先查看目前的索引结构
    • 请求示例:GET http://172.21.0.31:9900/business
    • 在这里插入图片描述
  • 然后通过ElasticSearch接口_close关闭索引
    • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.0/indices-close.html#close-index-api-request
    • 请求示例:http://172.21.0.31:9900/business/_close
    • 在这里插入图片描述
  • 再通过PUT接口更新settings
    • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.0/indices-update-settings.html
    • 请求示例:http://172.21.0.31:9900/business/_settings
    • 在这里插入图片描述
    • 需要注意的是只能对未设置过的字段进行更新,当以上请求发出后,再次更新会抛错,提示无法更新
    • 在这里插入图片描述
  • 更新完成后,再通过接口启用该索引
    • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.0/indices-open-close.html
    • 请求示例:http://172.21.0.31:9900/business/_open
    • 在这里插入图片描述
  • 重新查看该索引结构,查看更新后的结构
    • 请求示例:GET http://172.21.0.31:9900/business
    • 在这里插入图片描述
更新索引映射的数据迁移
  • 同以上步骤相同,只不过更新是mappings
  • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.11/indices-put-mapping.html
重建索引_reindex,通过ElasticSearch提供的api _reindex接口进行索引数据迁移

优点:不影响旧索引数据,使用新的索引结构,即便出问题,也能够快速回滚到旧索引上
缺点:因为要迁移数据,操作较为麻烦。如果不删除旧数据索引,会额外的占用磁盘空间。业务需要使用新索引,可能需要做代码兼容

操作步骤

  • 先创建新的索引结构
    • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/indices-create-index.html
    • 请求示例 POST http://172.21.0.31:9900/business_bak
    • 在这里插入图片描述
  • 查看刚刚创建的新索引
    • 请求示例GET http://172.21.0.31:9900/business_bak
    • 需要注意numeric_detection数字转换和date_detection日期转换 ,在es中numeric_detection默认是false,但date_detection默认是开启的,所以我们需要显示的关闭date_detection选项,避免后面因为数据格式不一致导致迁移失败
    • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-field-mapping.html#_customizing_detected_date_formats
    • 在这里插入图片描述
  • 查看新索引中的数据,因为是刚新建的索引,所以数据是空的
    • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.0/search-search.html
    • 请求示例:GET http://172.21.0.31:9900/business_bak/_search
    • 在这里插入图片描述
  • 使用_reindex接口将索引business的索引数据复制至business_bak
    • 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.9/docs-reindex.html
    • 请求示例:POST http://172.21.0.31:9900/_reindex
    • 在这里插入图片描述
  • 再次查看新索引中的数据,已经和旧索引中的一摸一样了
    • 在这里插入图片描述
  • 当数据量比较大时,可以使用wait_for_completion=false,指定创建异步任务,请求成功后,es会返回一个任务编号,用于后续查看和取消
    • 以测试数据举例
    • 请求示例:POST http://172.21.0.31:9900/_reindexwait_for_completion=false
    • 在这里插入图片描述
    • 通过接口查看该任务的状态
    • 请求示例:GET http://172.21.0.31:9900/_tasks/OfyS4qUGTW2OuA2BL5fYgQ:36133906
    • 在这里插入图片描述
  • 若数据复制任务发生异常等情况,可以使用_cancel取消
    • 请求示例:POST http://172.21.0.31:9900/_tasks/OfyS4qUGTW2OuA2BL5fYgQ:36133906/_cancel
    • 在这里插入图片描述
    • 再次查看,任务已经消失了
    • 在这里插入图片描述

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值