减少ElasticSearch中的分片数量

时间:2015-04-30 08:16:12

标签: elasticsearch

创建索引后,是否可以减少ElasticSearch搜索引擎中的分片数量?

我试过了:

$ curl -XPUT 'localhost:9200/myindex/_settings' -d '{"index" : {"number_of_shards" : 3}}'

但是它给出了一个错误:

{"error":"ElasticsearchIllegalArgumentException[can't change the number of shards for an index]","status":400}

3 个答案:

答案 0 :(得分:2)

这已不再适用,使用5.x,您可以将索引数量减少到一小部分。例如,从12开始,你可以下降到1,2,3或6(见Why doesn't Visual Studio break on exceptions when debugging unit tests?)。但是你必须将它置于只读模式,自然缩小的过程需要大量的IO。

答案 1 :(得分:1)

不,这是不可能的。你可以改变很多东西 - 例如每个分片的副本数,或许多其他索引设置,但不是分片数。

有关详细信息,请查看此处 - http://www.elastic.co/guide/en/elasticsearch/reference/1.5/indices-update-settings.html

答案 2 :(得分:1)

确定。就像@Mysterion所说的那样,直接用索引更新来改变零停机时间的分片数是不可能的。但还有另一种方式。

在使用所需数量的分片创建旧索引之后,您需要将旧索引重新索引到新索引中。 (就像我说没有零停机时间)

为此,您可以使用 Scroll Search API

  

当搜索请求返回结果的单个“页面”时,滚动API可用于从单个搜索请求中检索大量结果(甚至所有结果),其方式与使用光标在传统的数据库上。

     

滚动不是针对实时用户请求,而是针对处理大量数据,例如为了将一个索引的内容重新索引到具有不同配置的新索引中。

     

客户支持滚动和重新编制索引:   一些官方支持的客户端提供帮助程序来协助滚动搜索并将文档从一个索引重新索引到另一个索引:

     

的Perl   请参阅Search::Elasticsearch::BulkSearch::Elasticsearch::Scroll

     

的Python   见elasticsearch.helpers.*

有关Scroll Search API的更多信息,建议使用official documentation

您可能还想看看这个答案here,也许它也可以为您提供一些想法,以防您使用Java。