我有一个包含数千个索引的索引,每个索引有5个分片。 我想用每个索引仅1个碎片重新索引它们。
Elastic中是否有内置解决方案,可以通过向每个索引添加“ -reindexed”来为所有索引重新索引?
答案 0 :(得分:1)
好像您想在重新索引时动态更改索引名称。
让我们通过一个例子来理解这一点:
1)添加一些索引:
POST sample/_doc/1
{
"test" : "sample"
}
POST sample1/_doc/1
{
"test" : "sample"
}
POST sample2/_doc/1
{
"test" : "sample"
}
2)使用Reindex API动态更改索引名称,同时为多个索引重新索引:
POST _reindex
{
"source": {
"index": "sample*"
},
"dest": {
"index": ""
},
"script": {
"inline": "ctx._index = ctx._index + '-reindexed'"
}
}
上述请求将为所有以 sample 开头的索引重新编制索引,并在其indexName中添加 -reindexed 。因此,这意味着 sample , sample1 和 sample2 将重新索引为 sample-reindexed , sample1-reindexed 和 sample2-reindexed 都与此请求有关。
要使用一个分片设置目标索引,您需要 在重新索引之前创建这些索引。
希望有帮助。
答案 1 :(得分:1)
您可以做一个简单的reindex
,但我也建议您看一下Shrink Index
API:
https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-shrink-index.html
上面的文档链接到v7.0,但这已经存在很多迭代了。
在您的示例中,您将执行以下操作:
首先,将所有主或副本分片的副本重新分配到单个节点,并在执行收缩操作时防止将来进行任何写访问。
PUT /my_source_index/_settings
{
"settings": {
"index.routing.allocation.require._name": "shrink_node_name",
"index.blocks.write": true
}
}
启动收缩操作,清除上一个命令中设置的索引设置,然后更新目标索引上的主设置和副本设置:
POST my_source_index/_shrink/my_target_index-reindexed
{
"settings": {
"index.routing.allocation.require._name": null,
"index.blocks.write": null,
"index.number_of_replicas": 1,
"index.number_of_shards": 1,
"index.codec": "best_compression"
}
}
请注意,上面还分配了一个副本分片-如果您不希望这样做,请确保将其设置为0。
您可能希望设置某种脚本来逐一遍历源索引列表。