【HBZ分享】ES中的Reindex重建索引

news/2024/10/20 20:52:34/

Reindex如何实现索引重建?

  1. 滚动索引 + 批量复制

Reindex存在的问题

  1. 如果新的索引没有提前创建好,并指定字段类型,那么重建后的新索引类型极有可能会和旧的索引不一致,因为ES他会推断类型,而推断错误率从实战来说那是相当的高

Reindex能解决的问题

  1. 字段类型设置错了
  2. 旧的索引分片不合理,想重新分
  3. 某批数据存错了,或只想保留具备指定特性或关键字的数据,可以根据条件来重建索引,筛选出符合条件的数据进行重建,
POST _reindex
{"source": {"index":"remind_test",   // 旧的源索引名称"query": {"term": {"summary": "java"   // 只重建包含java的数据}}},"dest":{"index": "remind_new"   // 重建后新索引的索引名称}
}
  1. 指向要指定的字段,其余字段想删掉,也可以使用重建索引
POST _reindex
{"source": {"index":"remind_test",   // 旧的源索引名称"_source": ["id", "title", "name"]   // 只重建id, title, name字段,其余字段不要了,则重建后的新索引,只会有这3个字段},"dest":{"index": "remind_new"   // 重建后新索引的索引名称}
}
  1. 多个索引库合并重建(即有多个索引,想把字段和数据整合到一个大索引中)
    == 注意: 如果多个索引中存在相同的文档id,合并后只会保留最后一个,因为会覆盖掉前面的==
POST _reindex
{"source": {"index":["remind_test_1", "remind_test_2", "remind_test_3"],   // 旧的多个源索引名称},"dest":{"index": "remind_new"   // 重建后新索引的索引名称}
}
  1. 扩展:索引数据冲突如何解决: 使用conflicts参数
abort: 中止操作。如果复制中发生了冲突,即源索引的ID出现相同的,则会终止整个重建操作
proceed: 继续操作,不会更新与源索引ID冲突的文档,可能会导致目标索引中存在冲突的文档,会导致数据不一致,需要进行之后处理
overwrite: 覆盖操作,发生冲突时,直接覆盖,后面的覆盖前面的POST _reindex
{"source": {"conflicts": "proceed","index":["remind_test_1", "remind_test_2", "remind_test_3"],   // 旧的多个源索引名称},"dest":{"index": "remind_new"   // 重建后新索引的索引名称}
}

重建索引Remindex注意事项

  1. reindex要求所有【源/旧】索引的所有文档启用_source
  2. reindex新的索引一定要指定好mapping, shard(分片), replica(副本)数据, 旧索引的这些配置是不会赋值到新索引的

单索引数据量较大,数据同步速度比较慢时,如何处理

  1. 在真正索引重建之前,最好在测试环境进行测试,防止在生产环境重建失败,导致多次重建消耗性能
  2. 评估好重建后索引大小,硬件配置等可用存储等因素,确保重建后能过够成功
  3. 增加资源,比如CPU, 内存等硬件信息,提高reindex操作效率
  4. 为了避免磁盘IO瓶颈,在进行reindex时,可以通过将源索引和目标索引放在不同的磁盘上,或者使用更快的SSD提升速度
  5. 在reindex时,可以将目标索引的刷新间隔设置改为-1, 从而避免不必要的刷新操作,提高reindex效率
  6. 重点:如果单索引数据量大,在迁移前,将目标索引的副本数设置为0, 以加快同步速度,等到迁移后,再修改回来

http://www.ppmy.cn/news/1026027.html

相关文章

shell从入门到精通(21)运行环境讨论

参考: https://www.gnu.org/software/bash/manual/html_node/Environment.html https://www.gnu.org/software/bash/manual/html_node/Command-Grouping.html 文章目录 关于函数执行的环境关于命令的分组关于命令的搜索、执行过程关于函数执行的环境 当一个程序被调用时,它会…

4.利用matlab符号矩阵的四则运算(matlab程序)

1.简述 符号对象的建立 sym函数 sym函数用于建立单个符号对象,其常用调用格式为: 符号对象名sym(A) 1 将由A来建立符号对象,其中,A可以是一个数值常量、数值矩阵或数值表达式(不加单引号),此时符号对象为一个符号常量;…

11.集群调度

文章目录 集群调度调度约束list-watc机制的概念pod的创建流程 调度过程Scheduler 作用预选策略优选策略指定调度节点nodeNamenodeSelector 亲和性node亲和pod亲和pod反亲和 污点(Taint)和容忍(Tolerations)污点(Taint)容忍(Tolera…

AI工具赋能,实现高效变现,实现提前下班

本篇文章很长并很有价值,希望你能耐心看到最后。 导语 在这个信息快速爆炸的时代,人工智能(AI)成为推动社会进步和创造价值的重要力量。 AI能改变世界吗?当然。 现在吗?不是。 我是一个热爱AI的程序员…

【杨辉三角的两种解法——(超级详细)】

杨辉三角 1.杨辉三角简介🕵️ 杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600…

3.0 Python 迭代器与生成器

当我们需要处理一个大量的数据集合时,一次性将其全部读入内存并处理可能会导致内存溢出。此时,我们可以采用迭代器Iterator和生成器Generator的方法,逐个地处理数据,从而避免内存溢出的问题。 迭代器是一个可以逐个访问元素的对象…

SpringBoot在线失物招领系统

一个基于SpringBootSemanticUI的pc Web在线失物招领系统 http://localhost:8080/swzl/index 主页 http://localhost:8080/swzl/login 登录页 用户表user admin字段为true是管理员 false用户 springboot2.3 springmvc mybatis html ajax idea 或eclipse maven mys…

三元组的最小距离

定义三元组 (a,b,c) (a,b,c 均为整数)的距离 D|a−b||b−c||c−a| 。 给定 3 个非空整数集合 S1,S2,S3,按升序分别存储在 3 个数组中。 请设计一个尽可能高效的算法,计算并输出所有可能的三元组 (a,b,c) (a∈S1…