乐趣区

关于sap:如何在已创建的-es-索引中增加分片

在 Elasticsearch 中,分片的数量在创立索引时就曾经设置好了,所以在曾经创立的索引中减少分片是不可能的。这是因为 Elasticsearch 在创立索引时,会依据分片的数量把数据分布到不同的节点上,如果在创立索引后扭转分片的数量,那么数据的散布就会出问题,这是 Elasticsearch 设计上的一个决定。

只管不能间接更改已存在的索引的分片数,但咱们能够通过从新索引(reindex)的形式来实现目标。也就是说,咱们须要创立一个新的索引,这个新的索引有咱们冀望的分片数量,而后把旧的索引的数据拷贝到新的索引中。

上面是具体的步骤:

  1. 创立新索引:你能够应用 PUT 命令创立一个新的索引,设置冀望的分片数量。例如:

    PUT /new_index
    {
      "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
      }
    }

    这个命令会创立一个名为 new_index 的新索引,它有 5 个主分片和 1 个正本分片。

  2. 从新索引:你能够应用 POST 命令将旧索引的数据复制到新索引中。例如:

    POST /_reindex
    {
      "source": {"index": "old_index"},
      "dest": {"index": "new_index"}
    }

    这个命令会把 old_index 索引中的数据复制到 new_index 索引中。

  3. 验证数据:你能够应用 GET 命令来查看新索引中的数据,确保数据曾经被正确复制。例如:

    GET /new_index/_search

    这个命令会返回 new_index 索引中的数据。

  4. 删除旧索引:如果你确定新索引中的数据是正确的,那么你能够删除旧的索引。例如:

    DELETE /old_index

    这个命令会删除 old_index 索引。

须要留神的是,这个过程可能须要一些工夫,因为它须要复制所有的数据。而且,在数据复制的过程中,如果有新的数据被写入到旧的索引中,那么这些新的数据不会被复制到新的索引中。为了解决这个问题,你可能须要在复制数据的过程中进行写入新的数据,或者在数据复制实现后,再复制在此期间新写入的数据。

退出移动版