如何增加 Elasticsearch 中的主分区数量

探索增加 Elasticsearch 主分区数量的方法。

刚接触 Elasticsearch 吗?欢迎参加我们的 Elasticsearch 入门网络研讨会。您也可以开始免费云服务试用,或立即在您的计算机上试用 Elastic。

无法增加现有索引的主分区数,这意味着如果要增加主分区数,必须重新创建索引。在这种情况下,通常使用两种方法:_reindex API 和 _split API。

与 _reindex API 相比,_split API 通常是更快的方法。在进行这两项操作前, 必须停止 索引 ,否则源索引和目标索引的文档计数将不同。

方法 1 - 使用拆分 API

拆分 API 用于通过复制设置和映射现有索引来创建一个新索引,其中包含所需的主分片数量。可在创建过程中设置所需的主分区数量。在实施拆分 API 之前,应检查以下设置:

  1. 源索引必须是只读的。这意味着需要停止索引进程。
  2. 目标索引中主分区的数量必须是源索引中主分区数量的倍数。例如,如果源索引有 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。在使用这两种方法之前,必须先停止主动索引。

相关内容

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用