【Elasticsearch】文档迁移(Reindex)

文档迁移

  • 1.为什么要进行 reindex 操作
  • 2.Reindex 操作的本质
  • 3.实际案例
    • 3.1 同集群索引之间的全量数据迁移
    • 3.2 同集群索引之间基于特定条件的数据迁移
      • 3.2.1 源索引设置检索条件
      • 3.2.2 基于 script 脚本的索引迁移
      • 3.2.3 基于预处理管道的数据迁移
    • 3.3 不同集群之间的索引迁移
    • 3.4 查看及取消 reindex 任务
      • 3.4.1 查看 reindex 任务
      • 3.4.2 取消 reindex 任务
  • 4.注意事项

1.为什么要进行 reindex 操作

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

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

2.Reindex 操作的本质

Reindex 本质上是 Elasticsearch 内部的一个 数据复制 过程,它:

  • 从源索引读取文档。
  • 可选地对文档进行转换。
  • 将文档写入目标索引。
  • 不是简单的文件复制,而是重新索引文档的过程。

3.实际案例

3.1 同集群索引之间的全量数据迁移

场景:将 old_index 的所有数据迁移到新建的 new_index,因为需要修改分片数量。

生成测试数据。

// 创建源索引 old_index
PUT old_index
{"mappings": {"properties": {"name": { "type": "text" },"age": { "type": "integer" },"email": { "type": "keyword" }}}
}// 批量插入测试数据
POST old_index/_bulk
{"index":{}}
{"name":"John Doe","age":28,"email":"john@example.com"}
{"index":{}}
{"name":"Jane Smith","age":32,"email":"jane@example.com"}
{"index":{}}
{"name":"Bob Johnson","age":45,"email":"bob@example.com"}
{"index":{}}
{"name":"Alice Brown","age":23,"email":"alice@example.com"}
{"index":{}}
{"name":"Tom Wilson","age":37,"email":"tom@example.com"}

在这里插入图片描述

执行迁移操作。

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

在这里插入图片描述
在这里插入图片描述

说明:这是最基本的 reindex 操作,将源索引所有文档复制到目标索引。

3.2 同集群索引之间基于特定条件的数据迁移

3.2.1 源索引设置检索条件

场景:只迁移 old_indexstatus 字段为 active 的文档。

生成测试数据。

// 创建带 status 字段的索引
PUT status_index
{"mappings": {"properties": {"name": { "type": "text" },"status": { "type": "keyword" },"value": { "type": "integer" }}}
}// 批量插入测试数据
POST status_index/_bulk
{"index":{}}
{"name":"Item 1","status":"active","value":100}
{"index":{}}
{"name":"Item 2","status":"inactive","value":200}
{"index":{}}
{"name":"Item 3","status":"active","value":150}
{"index":{}}
{"name":"Item 4","status":"pending","value":300}
{"index":{}}
{"name":"Item 5","status":"active","value":250}

在这里插入图片描述

执行迁移操作。

POST _reindex
{"source": {"index": "status_index","query": {"term": {"status": "active"}}},"dest": {"index": "status_index_new"}
}

在这里插入图片描述

3.2.2 基于 script 脚本的索引迁移

场景:迁移时修改字段,例如将 price 字段值增加 10 % 10\% 10%

生成测试数据。

// 创建产品索引
PUT products
{"mappings": {"properties": {"name": { "type": "text" },"price": { "type": "double" },"category": { "type": "keyword" }}}
}// 批量插入测试数据
POST products/_bulk
{"index":{}}
{"name":"Laptop","price":1000.00,"category":"electronics"}
{"index":{}}
{"name":"Smartphone","price":700.00,"category":"electronics"}
{"index":{}}
{"name":"Desk Chair","price":150.00,"category":"furniture"}
{"index":{}}
{"name":"Coffee Mug","price":10.00,"category":"kitchen"}
{"index":{}}
{"name":"Notebook","price":5.00,"category":"stationery"}

在这里插入图片描述

执行迁移操作。

POST _reindex
{"source": {"index": "products"},"dest": {"index": "products_new"},"script": {"source": "ctx._source.price *= 1.10"}
}

在这里插入图片描述

3.2.3 基于预处理管道的数据迁移

场景:在迁移过程中使用预处理管道处理数据,例如添加时间戳。

生成测试数据。

// 创建原始日志索引
PUT raw_logs
{"mappings": {"properties": {"message": { "type": "text" },"level": { "type": "keyword" },"source": { "type": "keyword" }}}
}// 批量插入测试日志数据
POST raw_logs/_bulk
{"index":{}}
{"message":"User logged in","level":"INFO","source":"auth-service"}
{"index":{}}
{"message":"Failed authentication attempt","level":"WARN","source":"auth-service"}
{"index":{}}
{"message":"Database connection lost","level":"ERROR","source":"db-service"}
{"index":{}}
{"message":"Cache refreshed successfully","level":"INFO","source":"cache-service"}
{"index":{}}
{"message":"High memory usage detected","level":"WARN","source":"monitoring-service"}

在这里插入图片描述

执行迁移操作。

PUT _ingest/pipeline/add_timestamp
{"description": "Adds a timestamp to documents","processors": [{"set": {"field": "@timestamp","value": "{{_ingest.timestamp}}"}}]
}POST _reindex
{"source": {"index": "raw_logs"},"dest": {"index": "raw_logs_new","pipeline": "add_timestamp"}
}

在这里插入图片描述

3.3 不同集群之间的索引迁移

场景:将集群 A 的 cluster_a_index 迁移到集群 B 的 cluster_b_index

生成测试数据。

// 创建模拟跨集群迁移的源索引
PUT cluster_a_index
{"mappings": {"properties": {"title": { "type": "text" },"views": { "type": "integer" },"published": { "type": "date" }}}
}// 批量插入测试数据
POST cluster_a_index/_bulk
{"index":{}}
{"title":"Introduction to Elasticsearch","views":1500,"published":"2023-01-15"}
{"index":{}}
{"title":"Kibana Dashboard Tutorial","views":3200,"published":"2023-02-20"}
{"index":{}}
{"title":"Advanced Logstash Pipelines","views":875,"published":"2023-03-10"}
{"index":{}}
{"title":"Elasticsearch Performance Tuning","views":2100,"published":"2023-04-05"}
{"index":{}}
{"title":"Machine Learning with ELK","views":1800,"published":"2023-05-12"}

在这里插入图片描述

在集群 B 上执行迁移操作。

// 在集群 B 上执行
POST _reindex
{"source": {"remote": {"host": "http://clusterA:9200","username": "admin","password": "xxxxxx"},"index": "cluster_a_index"},"dest": {"index": "cluster_b_index"}
}

在这里插入图片描述
在这里插入图片描述

注意事项(非常重要)

  • ⭐ 需要配置远程集群白名单。
    • elasticsearch.yml 中的 reindex.remote.whitelist 配置项。
  • ⭐ 网络连接必须畅通,比如:
    • 是否在同一 VPC 下;
    • 以何种方式访问,HTTP 还是 HTTPS(如果是 HTTPS,可能需要配置证书)。
  • ⭐ 大数据量迁移建议使用快照/恢复方式更高效。

3.4 查看及取消 reindex 任务

生成测试数据。

// 创建一个大索引用于测试长时间运行的 reindex 任务
PUT large_source_index
{"mappings": {"properties": {"data": { "type": "text" },"counter": { "type": "integer" }}}
}// 批量插入大量测试数据(1000条)
POST _scripts/generate_large_data
{"script": {"lang": "painless","source": """def bulk = new StringBuilder();for (int i = 0; i < 1000; i++) {bulk.append('{"index":{}}\n');bulk.append('{"data":"Test data ' + i + '","counter":' + i + '}\n');}return bulk.toString();"""}
}POST large_source_index/_bulk
{ "script": { "id": "generate_large_data" } }

3.4.1 查看 reindex 任务

GET _tasks?detailed=true&actions=*reindex

3.4.2 取消 reindex 任务

POST _tasks/{task_id}/_cancel

示例

// 先查看任务
GET _tasks?detailed=true&actions=*reindex// 返回结果中获取任务ID后取消
POST _tasks/oTUltX4IQMOUUVeiohTt8A:12345/_cancel

4.注意事项

  • Reindex 会占用大量资源,建议在低峰期执行
  • 大数据量 reindex 建议使用 slices 并行处理
  • 可以使用 wait_for_completion=false 异步执行
  • 监控任务进度,避免影响集群性能
  • 考虑版本兼容性问题,特别是跨大版本迁移时

Reindex 是 Elasticsearch 数据管理的重要工具,合理使用可以解决许多数据迁移和结构调整问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84289.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress 区块版面配置指南

WordPress 的区块编辑器(Gutenberg)提供了灵活的版面配置选项&#xff0c;以下是主要配置方法&#xff1a; 基本区块布局 添加区块&#xff1a;点击””按钮或按”/”键快速插入区块 常用内容区块&#xff1a; 段落(Paragraph) 标题(Heading) 图像(Image) 画廊(Gallery)…

TensorFlow基础之理解张量

2.理解张量 张量&#xff08;Tensors&#xff09;介绍 张量是物理和工程领域的基础数学结构。但是过去张量很少在计算机科学里使用。它与离散数学和逻辑学有更多的联系。随着机器学习的出现&#xff0c;这种状态开始显著的改变&#xff0c;成为连续向量的计算基础。现代机器学…

Flume 安装与配置步骤

1.解压 tar -zxvf apache-flume-1.9.0-bin.tar.gz 2.配置环境变量 vim /etc/profile export FLUME_HOME/home/wang/soft/flume/apache-flume-1.9.0-bin export PATH$PATH:$FLUME_HOME/bin source /etc/profile 3.创建必要的目录 mkdir -p $FLUME_HOME/conf 4.创建 Flume 配置文…

还原线上 WebView 异常:手机端APP远程调试

前端调试总被理解为开发阶段的事&#xff0c;但在实际项目中&#xff0c;真正困难的调试往往发生在产品上线之后。用户反馈“看不到内容”、“一直转圈”、“点了没反应”&#xff0c;而开发环境无法复现&#xff0c;测试机也正常运行&#xff0c;这时怎么定位、验证和解决问题…

102页满分PPT | 汽车设备制造业企业信息化业务解决方案智能制造汽车黑灯工厂解决方案

这份文档是一份汽车设备制造业企业信息化业务解决方案&#xff0c;详细阐述了企业从生产到销售的全流程信息化建设。针对企业目前手工管理为主、信息化程度低、数据追溯困难等问题&#xff0c;提出了建立统一信息化平台的目标&#xff0c;涵盖财务、业务、流程和数据的整合。方…

SQLite 表达式详解

SQLite 表达式详解 引言 SQLite 是一个轻量级的数据库,广泛用于移动设备和桌面应用程序。SQLite 的表达式是 SQL 语句的核心,它们用于查询、更新和删除数据库中的数据。本文将详细解释 SQLite 的各种表达式,并探讨它们在数据库操作中的重要性。 表达式概述 在 SQLite 中…

沉浸式AI交互数字人技术解析

360智汇云沉浸式AI交互数字人支持开发者灵活接入和私有化部署大模型服务&#xff0c;构建面向业务场景的实时音视频交互能力。系统集成了360智汇云自研的沉浸式AI交互数字人引擎与高性能 RTC 模块&#xff0c;保障音视频传输过程中的低延迟、高稳定性和高并发承载能力&#xff…

HarmonyOS 评论回复弹窗最佳实践

HarmonyOS 评论回复弹窗最佳实践 前言 在移动应用开发中&#xff0c;评论回复功能是一个常见且重要的交互场景。本文将详细介绍如何在 HarmonyOS 中实现一个功能完善的评论回复弹窗&#xff0c;包括弹窗选型、富文本编辑、软键盘适配等关键技术点。 功能概述 我们要实现的评…

Git 回退操作详解:带示例的“小白”指南

前言 在日常开发中&#xff0c;我们难免会遇到&#xff1a; 改错代码&#xff1a;推送之前才发现某些行根本就不该动提交错误&#xff1a;commit 信息打错、提交到错误分支想回到之前版本&#xff1a;测试时发现之前版本是好的&#xff0c;需要回去查看 这就需要用到 Git 的…

redux以及react-redux

1.redux案例完整版 上一篇文章我们是没有action文件&#xff0c;直接在countre组件与store以及reducer直接进行状态的改变以及展示。 下面我们加上action文件&#xff0c;我们就不能直接通过dispatch传&#xff0c;而是通过调用action里面的函数讲我们传入的参数变成action这种…

idea中配置svn及提交提示“未检测到更改”提示

首先要安装TortoiseSVN&#xff0c;选command line client tools&#xff1b; 在idea中&#xff0c;文件->设置->Subversion->如下图 文件->设置->目录映射->如下图 初次导入到svn&#xff0c; 输入服务器上的svn地址&#xff0c;等待成功即可&#xff1b;…

vue 实现dot-dropdown

<template><div class"app-container"><div class"mt30"></div><el-row :gutter"20"><!-- title --><!-- <div class"modt-box">导航管理</div> --><el-col :span"2&q…

使用 mysql2/promise 模块返回以后,使用 await 返回数据总结

SELECT 返回结构 const [rows, fields] await db.query(SELECT * FROM folders);返回&#xff1a; rows: 是一个数组&#xff0c;包含所有查到的记录。fields: 是字段的结构定义&#xff08;列信息&#xff09;&#xff0c;一般不用。 rows 是一个数组&#xff0c;包含所有…

Manus Metagloves pro高精度+无漂移+低延迟 ,重构VR/XR手部交互方式

manus metagloves pro是一款专为动画制作、虚拟现实及游戏开发打造的高精度无线动作捕捉手套。采用先进的Quantum追踪技术&#xff0c;实现毫米级动作捕捉&#xff0c;精准还原手指细节&#xff0c;显著提升创作效率与交互真实感。 MANUS Metagloves Pro解锁动捕 / 机器人 / XR…

Uniapp插件改造指南:如何让vue-plugin支持HarmonyOS5原生能力?

一、分层架构设计 采用通用逻辑与平台实现分离的三层结构&#xff1a; uni-plugin-harmony ├── common # 跨平台通用层 │ ├── interfaces # 能力接口抽象&#xff08;如Scanner.ets&#xff09; │ └── utils # 工具类 ├── harmony …

P1040 [NOIP 2003 提高组] 加分二叉树 题解

题目描述 设一个 n n n 个节点的二叉树 tree \text{tree} tree 的中序遍历为 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n)&#xff0c;每个节点都有一个分数&#xff08;均为正整数&#xff09;。任一棵子树 subtree \text{subtree} subtree&#xff08;包含 tr…

【Golang面试题】Data Race 问题怎么检测?

Go Race Detector 深度指南&#xff1a;原理、用法与实战技巧 一、什么是数据竞争&#xff1f; 在并发编程中&#xff0c;数据竞争发生在两个或多个 goroutine 同时访问同一内存位置&#xff0c;且至少有一个是写操作时。这种竞争会导致不可预测的行为和极其难以调试的问题。…

257. 二叉树的所有路径(js)

257. 二叉树的所有路径——DFS 回溯&#xff08;js&#xff09; 题目描述解题思路完整代码时间复杂度分析 题目描述 257. 二叉树的所有路径 解题思路 题意理解 给定一棵二叉树&#xff0c;要求返回所有从根节点到叶子节点的路径&#xff0c;路径以字符串形式表示&#xff0c…

自动化文档生成工具(亲测可运行)

本文介绍了一个用Java编写的自动化文档生成工具&#xff0c;通过读取开发清单文本自动生成格式规范的Word文档。该工具的主要特点包括&#xff1a; 采用Apache POI库处理Word文档&#xff0c;支持多级标题和段落自动生成实现中文数字转换功能&#xff0c;将编号转换为"一、…

湖北理元理律师事务所债务优化模型:法律与生活的平衡之道

在债务重组领域&#xff0c;专业机构需同时解决两个矛盾&#xff1a;法律合规性与债务人可持续生存能力。湖北理元理律师事务所通过“三维干预模型”&#xff0c;在武汉某餐饮连锁企业债务危机中验证了该方案的有效性。 一、法律底层设计&#xff1a;还款方案的合法性审查 以该…