如何增加 Elasticsearch 中的 primary shard 数量

作者:来自 Elastic Kofi Bartlett

探索增加 Elasticsearch 中 primary shard 数量的方法。

更多阅读:

  • Elasticsearch:Split index API - 把一个大的索引分拆成更多分片

  • Elasticsearch:通过 shrink API 减少 shard 数量来缩小 Elasticsearch 索引

  • Elasticsearch: Reindex 接口

无法增加已有索引的 primary shard 数量,这意味着如果你想增加 primary shard 数量,必须重新创建索引。在这种情况下通常有两种方法可用: _reindex API 和 _split API。

_split API 通常比 _reindex API 更快。在执行这两种操作之前必须停止写入索引,否则 source_index 和 target_index 的文档数量会不一致。

方法 1 – 使用 split API

split API 用于通过复制现有索引的设置和映射,创建一个具有所需 primary shard 数量的新索引。可以在创建过程中设置所需的 primary shard 数量。在使用 split API 之前应检查以下设置:

  • 源索引必须是只读的。这意味着需要停止写入过程。

  • 目标索引的 primary shard 数量必须是源索引 primary shard 数量的倍数。例如,如果源索引有 5 个 primary shard,目标索引可以设置为 10、15、20 等。

注意:如果只需要更改 primary shard 数量,建议使用 split API,因为它比 Reindex API 快得多。

实现 split API

创建一个测试索引:

POST test_split_source/_doc
{"test": "test"
}

我们可以使用如下的命令来查看这个索引的设置:

GET test_split_source/_settings
{"test_split_source": {"settings": {"index": {"routing": {"allocation": {"include": {"_tier_preference": "data_content"}}},"number_of_shards": "1","provided_name": "test_split_source","creation_date": "1744934104333","number_of_replicas": "1","uuid": "Ixn7Y6gdTaOnuW9x9AbEjg","version": {"created": "9009000"}}}}
}

我们可以看到 number_of_shards 为 1。

源索引必须是只读的才能进行 split:

PUT test_split_source/_settings
{"index.blocks.write": true
}

设置和映射会自动从源索引复制:

POST /test_split_source/_split/test_split_target
{"settings": {"index.number_of_shards": 3}
}

在上面,我们可以看到 number_of_shards 是 3。它是我们之前的 1 的整数倍。

你可以使用以下命令检查进度:

GET _cat/recovery/test_split_target?v&h=index,shard,time,stage,files_percent,files_total

由于设置和映射是从源索引复制的,目标索引是只读的。现在让我们为目标索引启用写入操作:

PUT test_split_target/_settings
{"index.blocks.write": null
}

在删除原始索引之前,检查源索引和目标索引的 docs.count:

GET _cat/indices/test_split*?v&h=index,pri,rep,docs.count

索引名称和别名名称不能相同。你需要删除源索引,并将源索引名称作为别名添加到目标索引:

DELETE test_split_source
PUT /test_split_target/_alias/test_split_source

在将 test_split_source 别名添加到 test_split_target 索引后,你应该使用以下命令进行测试:

GET test_split_source
POST test_split_source/_doc
{"test": "test"
}

方法 2 – 使用 reindex API

通过使用 Reindex API 创建新索引,可以设置任何数量的 primary shard 数量。在使用所需的 primary shard 数量创建新索引后,源索引中的所有数据可以重新索引到该新索引。

除了 split API 的功能外,还可以使用 reindex API 中的 ingest_pipeline 对数据进行处理。通过 ingest_pipeline,只有符合筛选条件的指定字段会使用查询索引到目标索引中。数据内容可以通过 painless 脚本进行修改,并且可以将多个索引合并为一个索引。

实现 reindex API

创建一个测试 reindex:

POST test_reindex_source/_doc
{"test": "test"
}

从源索引复制设置和映射:

GET test_reindex_source

使用设置、映射和所需的 shard 数量创建目标索引:

PUT test_reindex_target
{"mappings" : {},"settings": {"number_of_shards": 10,"number_of_replicas": 0,"refresh_interval": -1}
}

*注意:设置 number_of_replicas: 0 和 refresh_interval: -1 将提高 reindex 速度。

启动 reindex 过程。设置 requests_per_second=-1 和 slices=auto 将调整 reindex 速度。

POST _reindex?requests_per_second=-1&slices=auto&wait_for_completion=false
{"source": {"index": "test_reindex_source"},"dest": {"index": "test_reindex_target"}
}

当你运行 reindex API 时,系统会显示 task_id。复制该 task_id 并使用 _tasks API 检查进度:

GET _tasks/<task_id>

在 reindex 完成后,更新设置:

PUT test_reindex_target/_settings
{"number_of_replicas": 1,"refresh_interval": "1s"
}

在删除原始索引之前,检查源索引和目标索引的 docs.count,应该是相同的:

GET _cat/indices/test_reindex_*?v&h=index,pri,rep,docs.count

索引名称和别名名称不能相同。删除源索引,并将源索引名称作为别名添加到目标索引:

DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_source

在将 test_split_source 别名添加到 test_split_target 索引后,使用以下命令进行测试:

GET test_reindex_source

总结

如果你想增加已有索引的 primary shard 数量,需要将设置和映射重新创建到一个新索引中。实现这一点有两种主要方法:reindex API 和 split API。在使用这两种方法之前,必须停止当前的索引操作。

想获得 Elastic 认证吗?了解下一期 Elasticsearch 工程师培训的时间!

Elasticsearch 拥有许多新特性,帮助你为你的用例构建最佳的搜索解决方案。深入了解我们的示例笔记本,开始免费的云试用,或现在就尝试在本地机器上使用 Elastic。

原文:How to increase primary shard count in Elasticsearch - Elasticsearch Labs

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

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

相关文章

基于SA模拟退火算法的车间调度优化matlab仿真,输出甘特图和优化收敛曲线

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SA模拟退火算法的车间调度优化matlab仿真,输出甘特图和优化收敛曲线。输出指标包括最小平均流动时间&#xff0c;最大完工时间&#xff0c;最小间隙时间。 2…

Spring_MVC 快速入门指南

Spring_MVC 快速入门指南 一、Spring_MVC 简介 1. 什么是 Spring_MVC&#xff1f; Spring_MVC 是 Spring 框架的一个模块&#xff0c;用于构建 Web 应用程序。它基于 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;将应用程序分为模型&#xff08;M…

爬虫获取sku信息需要哪些库

在使用 Python 爬虫获取淘宝商品的 SKU 详细信息时&#xff0c;通常需要以下几种库来完成任务。这些库各有其用途&#xff0c;可以帮助你更高效地实现爬虫功能。 1. requests 用途&#xff1a;用于发送 HTTP 请求&#xff0c;获取网页内容。 安装&#xff1a; bash pip insta…

赛灵思Xilinx FPGa XCKU15P‑2FFVA1156I AMD Kintex UltraScale+

XCKU15P‑2FFVA1156I 是 AMD Kintex UltraScale 系列中的高性能 FPGA&#xff0c;基于 16 nm FinFET UltraScale 架构 制造&#xff0c;兼顾卓越的性能与功耗比&#xff0c;该器件集成 1,143,450 个逻辑单元和 82,329,600 位片上 RAM&#xff0c;配备 1,968 个 DSP 切片&#…

从规则到大模型:知识图谱信息抽取实体NER与关系RE任务近10年演进发展详解

摘要: 本文回顾了关系抽取与实体抽取领域的经典与新兴模型,清晰地梳理了它们的出现时间与核心创新,并给出在 2025 年不同资源与场景下的最佳实践推荐。文章引用了 BiLSTM‑CRF、BiLSTM‑CNN‑CRF、SpanBERT、LUKE、KnowBERT、CasRel、REBEL、UIE,大模型抽取 等模型的原始论…

基于Django实现农业生产可视化系统

基于Django实现农业生产可视化系统 项目截图 登录 注册 首页 农业数据-某一指标表格展示 农业数据-某一指标柱状图展示 农业数据-某一指标饼状图展示 气候数据-平均气温地图展示 气候数据-降水量合并图展示 后台管理 一、系统简介 农业生产可视化系统是一款基于DjangoMVTMyS…

【无人机】无人机的电调校准,ESC Calibration,PX4使用手册电调校准详细步骤

目录 1、前提 条件​ 2、详细步骤​ 3、故障 排除​ 无人机的电调校准&#xff0c;ESC Calibration&#xff0c;PX4使用手册电调校准详细步骤 参考&#xff1a;ESC 校准 |PX4 指南 &#xff08;v1.15&#xff09; ​信息 这些说明仅与 PWM ESC 和 OneShot ESC 相关。DShot…

区块链预言机(Oracle)详解:如何打通链上与现实世界的关键桥梁?

文章目录 一、什么是区块链预言机&#xff1f;1.1 区块链的封闭性问题1.2 预言机的定义与作用举个例子&#xff1a; 1.3 为什么预言机是 Web3 的关键基础设施&#xff1f; 二、预言机的基本分类与工作模式2.1 输入型与输出型预言机&#xff08;1&#xff09;输入型预言机&#…

工具:下载vscode .vsix扩展文件及安装的方法

1 背景 vscode的使用环境无法连接互联网访问Extensions for Visual Studio family of products | Visual Studio Marketplace&#xff0c;导致无法直接在vscode里面下载并安装所需扩展 所以需要先在有网的环境下载插件文件&#xff0c;然后在没网的环境安装插件 2 下载方式 …

Oracle 23ai Vector Search 系列之6 向量相似性搜索(Similarity Search)

文章目录 Oracle 23ai Vector Search 系列之6 向量相似性搜索&#xff08;Similarity Search&#xff09;向量相似性搜索&#xff08;Similarity Search&#xff09;概述向量距离度量欧式距离&#xff08;Euclidean Distances&#xff09;欧式平方距离&#xff08;Euclidean Sq…

NLP与社区检测算法的结合:文本中的社区发现

NLP与社区检测算法的结合&#xff1a;文本中的社区发现 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;社区检测算法被广泛应用于从大规模文本数据中识别出具有相似主题或兴趣的不同群体。这种结合不仅能够帮助我们理解文本内容的结构&#xff0c;还能揭示隐藏在…

解锁古籍中的气候密码,探索GPT/BERT在历史灾害研究中的前沿应用;气候史 文本挖掘 防灾减灾;台风案例、干旱案例、暴雨案例

历史灾害文献分析方法论的研究&#xff0c;是连接过去与未来的关键桥梁。通过对古籍、方志、档案等非结构化文本的系统性挖掘与量化分析&#xff0c;不仅能够重建千年尺度的灾害事件序列&#xff08;如台风、洪旱等&#xff09;&#xff0c;弥补仪器观测数据的时空局限性&#…

超级桌面 TV 版下载:安卓电视版官方正版与刷机固件深度剖析

在智能电视领域&#xff0c;一款出色的桌面应用能极大提升用户的使用体验。超级桌面 TV 版作为备受瞩目的选择&#xff0c;以其独特的功能和优势脱颖而出。今天&#xff0c;我们就来深入探讨安卓电视版官方正版超级桌面 TV 版的下载方法&#xff0c;以及刷机固件的奥秘&#xf…

金融图QCPFinancial

QCPFinancial 是 QCustomPlot 中用于绘制金融图表&#xff08;如蜡烛图/K线图&#xff09;的核心类。以下是其关键特性的详细说明&#xff1a; 一、主要属性 属性类型说明dataQSharedPointer<QCPFinancialDataContainer>存储金融数据的数据容器chartStyleQCPFinancial:…

Linux学习笔记|入门指令

man 指令 用法&#xff1a;man [指令名称] &#xff0c;用于查看指定指令的帮助手册&#xff0c;获取指令的详细语法、选项及使用示例等信息 。示例&#xff1a;想了解 ls 指令的用法&#xff0c;执行 man ls &#xff0c;会进入 man 手册页面展示 ls 相关信息。按 q 键可退出。…

PD分离:优化大语言模型推理效率

PD分离&#xff1a;优化大语言模型推理效率 在大语言模型的推理过程中&#xff0c;Prefill 和 Decode 是两个关键阶段。随着模型规模的不断扩大&#xff0c;如何高效地处理这两个阶段的计算任务&#xff0c;成为了一个亟待解决的问题。 一、什么是 Prefill 和 Decode&#xf…

【MATLAB例程】AOA定位、AOA与TOA混合定位,二维环境下的对比,基站(锚点数量)自适应调整,附代码下载链接

该代码实现了一个 A O A AOA AOA&#xff08;到达角&#xff09;与 T O A TOA TOA&#xff08;到达时间&#xff09;混合定位的例程&#xff0c;适用于二维平面&#xff0c;并支持自适应基站数量。订阅专栏后可直接获取完整的源代码&#xff0c;粘贴到MATLAB空脚本中即可运行 文…

uCOS3实时操作系统(系统架构和中断管理)

文章目录 系统架构中断管理ARM中断寄存器相关知识ucos中断机制 系统架构 ucos主要包含三个部分的源码&#xff1a; 1、OS核心源码及其配置文件&#xff08;ucos源码&#xff09; 2、LIB库文件源码及其配置文件&#xff08;库文件&#xff0c;比如字符处理、内存管理&#xff0…

前端api(请求后端)简易template

微信小程序 API 模块模板 基本 API 模块结构 /*** 示例API模块*/ const api require(../api); const config require(../../config/index);// 示例API对象 const exampleApi {// API方法定义... };// 导出模块 module.exports exampleApi;标准 RESTful 请求方法 获取列表…

leetcode 1035. Uncrossed Lines

题目描述 本题本质上就是求nums1和nums2的最长公共子序列的长度。因此本题本质上与第1143题一模一样。 代码&#xff1a; class Solution { public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {//本题等价于求nums1和nums2的最长公…