如果我减少@Document 注释中的分片参数,Elasticsearch 会自行减少分片数量吗?

Will Elasticseach reduce shards number by itself, if I reduce the shards paremeter in @Document annotation?

我在 Spring 启动应用程序中使用 Spring Data Elasticsearch 为我的实体设置了 @Document(shards=5)。我已经意识到它太耗费资源,因此已将其减少到 @Document(shards=1) 并使用新代码重新部署了 java 应用程序。我在 ElasticSearch 方面没有采取任何行动。

Jest 客户端应该尽最大努力减少使用的分片数量,还是应该由我作为 Elasticsearch 管理员来完成?

一旦使用给定数量的主分片创建了索引,您就无法修改它。简单地重新部署您的应用程序可能不会重新创建索引,您需要先删除它,然后让您的应用程序在启动时使用新的分片数量重新创建它。

您可以使用以下方法轻松查看更改是否已应用(即您的索引是否有 5 个或 1 个分片):

GET _cat/shards/your-index-name

Spring 数据 Elasticsearch 在创建索引时使用此信息;它没有重新应用于更改参数,如分片的数量。因此,Spring Data Elasticsearch 无法实现您想做的事情。

如果您有能力删除数据并有可能重新加载它,则删除索引,使用更改后的 @Document 注释重新启动您的程序并重新加载数据。

如果无法简单地重新加载数据,可以直接在Elasticsearch中执行以下操作(具体命令请参考Elasticsearch文档):

  • 使用您想要的分片设置创建一个新索引,并将其命名为 index-new
  • reindex your old index to the new index
  • 如果您可以接受新索引名称,请更改您的 @Document 注释以使用新索引。
  • 如果不是,则删除旧索引并使用旧名称和新设置重新创建它,并从 index-new 重新索引到具有新名称的索引