刚接触 Elasticsearch 吗?欢迎参加我们的 Elasticsearch 入门网络研讨会。您也可以开始免费云服务试用,或立即在您的计算机上试用 Elastic。
无法增加现有索引的主分区数,这意味着如果要增加主分区数,必须重新创建索引。在这种情况下,通常使用两种方法:_reindex API 和 _split API。
与 _reindex API 相比,_split API 通常是更快的方法。在进行这两项操作前, 必须停止 索引 ,否则源索引和目标索引的文档计数将不同。

方法 1 - 使用拆分 API
拆分 API 用于通过复制设置和映射现有索引来创建一个新索引,其中包含所需的主分片数量。可在创建过程中设置所需的主分区数量。在实施拆分 API 之前,应检查以下设置:
- 源索引必须是只读的。这意味着需要停止索引进程。
- 目标索引中主分区的数量必须是源索引中主分区数量的倍数。例如,如果源索引有 5 个主分区,那么目标索引的主分区可以设置为 10、15、20,以此类推。
注意:如果只需要更改主分区编号,则首选拆分 API,因为它比 Reindex API 快得多。
实施拆分应用程序接口
创建测试索引:
源索引必须是只读的,才能进行拆分:
设置和映射将自动从源索引中复制:
您可以通过以下方式检查进度:
由于设置和映射是从源索引中复制的,因此目标索引是只读的。让我们启用目标索引的写操作:
删除原始索引前,检查源索引和目标索引的 docs.count:
索引名称和别名不能相同。您需要删除源索引,并将源索引名称作为别名添加到目标索引中:
将test_split_source别名添加到test_split_target索引后,应使用
方法 2 - 使用重新索引 API
通过使用 Reindex API 创建新索引,可以给出任意数量的主分区计数。在创建具有预定主分片数量的新索引后,源索引中的所有数据都可以重新索引到这个新索引。
除了拆分 API 功能外,还可以使用 reindex AP 中的 ingest_pipeline 对数据进行操作。通过摄取管道,只有符合过滤器的指定字段才会被索引到使用查询的目标索引中。数据内容可通过简单的脚本进行更改,多个索引可合并为一个索引。
实施重新索引 API
创建测试重新索引:
从源索引中复制设置和映射:
创建包含设置、映射和所需分片数的目标索引:
*注意:设置 number_of_replicas:0 和 refresh_interval: -1 会提高重新索引的速度。
启动重新索引程序。设置 requests_per_second=-1 和 slices=auto 可以调整重新索引的速度。
运行 reindex API 时,您将看到 task_id。复制并使用 _tasks API 进行检查:
重新索引完成后更新设置:
删除原始索引前,请检查源索引和目标索引的 docs.count,它们应该是一样的:
索引名称和别名不能相同。删除源索引,并将源索引名称作为别名添加到目标索引中:
将 test_split_source 别名添加到 test_split_target 索引后,使用
总结
如果要增加现有索引的主分区数,则需要重新创建新索引的设置和映射。主要有两种方法:重新索引 API 和拆分 API。在使用这两种方法之前,必须先停止主动索引。




