当前位置: 首页 > news >正文

使用Reindex迁移Elasticsearch集群数据详解(上)

#作者:stackofumbrella

文章目录

  • Reindex简介
  • 应用场景
  • Reindex基本使用
    • 命令行
    • 将多个索引reindex到一个目标
    • 使用脚本
    • 使用Ingest Node

Reindex简介

Reindex是Elasticsearch中一种将数据从一个索引复制到另一个索引的操作,主要用途包括:

  • 索引结构变更:当需要修改映射设置,但无法直接更新现有索引时。
  • 数据迁移:将数据从一个索引或集群迁移到另一个索引或集群。
  • 数据转换:在迁移过程中对数据进行修改或过滤。
  • 分片优化:调整分片数量或分片策略。
  • 版本升级:跨大版本升级时重建索引。

Reindex本质上是Elasticsearch内部的一个数据复制过程,它不是简单的文件复制,而是重新索引文档的过程。从源索引读取文档,可选地对文档进行转换,将文档写入目标索引。

应用场景

当数据量过大,而索引最初创建的分片不足,导致数据入库较慢, 此时需要扩大分片数量,可以使用Reindex。
当数据的mapping需要修改,但大量的数据已经导入到索引中,重新导入数据到新的索引太耗时,同时ES的mapping一旦定义之后是不允许修改的,这时可以用Reindex。
注意事项
源和目的不能相同, 比如不能将数据流Reindex给它自身。源索引的文档中_source字段必须开启。Reindex不会复制源的setting和源所匹配的模板, 因此在调用_reindex前, 需要设置好目的索引 (action.auto_create_index 为 false或者-.*时)。目标索引的mapping,主分片数,副本数等推荐提前配置。
如果Elasticsearch集群配置了安全策略和权限策略, 则进行Reindex必须拥有以下权限:
读取源的数据流、索引、索引别名等索引级别权限。
对于目的数据流、索引、索引别名的写权限。
如果需要使用Reindex API自动创建数据流和索引, 则必须拥有对目的数据流、索引、索引别名的auto_configure、 create_index或manage等索引级别权限。
如果源为远程的集群,则source.remote.user用户必须拥有集群监控权限和读取源索引、源索引别名、源数据流的权限。
如果Reindex的源为远程集群, 必须在当前集群的请求节点elasticsearch.yml文件配置远程白名单reindex.remote.whitelist。
创建数据流需要提前配置好数据流的匹配索引模板,参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.11/set-up-a-data-stream.html

Reindex基本使用

迁移旧索引到新索引

POST _reindex
{"source": {"index": "old_index"},"dest": {"index": "new_index"}
}

命令行

$ curl -XPOST 'http://127.0.0.1:9200/_reindex' -d{"source":{"index:"old_index""}, "dest":{"index":"new_index"}}

将多个索引reindex到一个目标

POST _reindex
{"source": {"index": ["weixin", "blog"],"type": ["tweet", "post"]},"dest": {"index": "all_family"}
}

这里需要注意的是如果weixin和blog中有document的id是一样的,就无法保证最终出现在all_family里面的document是哪个,因为迭代是随机的,最后一个会覆盖前一个。
只复制特定的field

POST _reindex
{"source": {"index": "mm","_source": ["user", "tweet"]},"dest": {"index": "new_mm"}
}

使用脚本

POST _reindex
{"source": {"index": "mm"},"dest": {"index": "new_mm","version_type": "external"},"script": {"source": "if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}","lang": "painless"}
}

使用Ingest Node

这个功能是最好用的,当source是因为不合理的结构,需要重新结构化所有的数据时,通过ingest node,可以很方便的在新的index中获得不一样的mapping和value

POST _reindex
{"source": {"index": "source"},"dest": {"index": "dest","pipeline": "some_ingest_pipeline"}
}
http://www.dtcms.com/a/479447.html

相关文章:

  • 网站设计 优帮云北京做网站公司电话
  • 上海高端网站制作公司专业网站设计建设服务
  • 大模型-CLIP 双编码器架构如何优化图文关联
  • [Qlib] `Model` | `fit` `predict`
  • 线程池Executors
  • 莆田企业网站建设网站建设的会计核算
  • Redis集群架构详解:如何实现高可用和高性能
  • 凤岗网站建设电商系统架构图
  • 知乎 上海做网站的公司自己做一个网站需要多少钱
  • 广州网站开发怎么做如何利用网站来提升企业形象
  • ESD防护设计宝典(八):能量的阀门——电源分配网络(PDN)设计
  • 怎么建设网站规划网站开场动画怎么做
  • 帝国cms怎么做网站地图竞价推广代运营公司
  • C语言--VSCode开发环境配置
  • 企业网站建设智恒网络山东网站营销seo哪家好
  • 12380网站建设打算手机网站建设liedns
  • 为什么做营销型网站网站的经营推广
  • 公章在线制作网站沈阳建设工程质量安全
  • vtkImageThreshold 图像阈值处理指南:从基础到实战优化
  • 佳木斯网站建设公司企业产品展示网站源码
  • MySQL8数据库高级特性
  • 遵义网站建设gzyhg设计一个网站多少钱
  • 设置自己的网站php+mysql网站开发...
  • C++ Builder XE在RzListView1中使用 Selected 属性获取行号,双击显示选中某行的行号
  • 广告制作公司的营业成本沧州网站建设优化案例
  • C语言多次输入过程中getchar()“被跳过”问题
  • Ubuntu安装hadoop
  • 海外网站cdn加速下载江苏建设工程网
  • dede织梦仿站网站建设网络优化公司
  • 自己建网站需要服务器么律所网站建设建议