收缩索引
1.0 版引入
收缩索引 API 操作将现有索引中的所有数据移动到主分片更少的新索引中。
端点
POST /<index-name>/_shrink/<target-index>
PUT /<index-name>/_shrink/<target-index>
使用此操作创建新索引时,请记住 OpenSearch 索引有以下命名限制:
- 所有字母必须是小写。
- 索引名称不能以下划线 (
_
) 或连字符 (-
) 开头。 -
索引名称不能包含空格、逗号或以下字符:
:
、"
、*
、+
、/
、\
、|
、?
、#
、>
或<
路径参数
参数 | 类型 | 描述 |
---|---|---|
<索引名称> | 字符串 | 要收缩的索引。 |
<目标索引> | 字符串 | 将源索引收缩到的目标索引。 |
查询参数
收缩索引 API 操作要求您同时指定源索引和目标索引。所有其他参数均为可选。
参数 | 类型 | 描述 |
---|---|---|
wait_for_active_shards | 字符串 | 指定 OpenSearch 处理请求之前必须可用的活动分片数量。默认值为 1(仅主分片)。可设置为 all 或正整数。大于 1 的值需要副本。例如,如果您指定值为 3,则索引必须有两个副本分布在另外两个节点上,请求才能成功。 |
cluster_manager_timeout | 时间 | 等待连接到集群管理器节点的时间。默认值为 30s 。 |
timeout | 时间 | 等待请求返回响应的时间。默认值为 30s 。 |
wait_for_completion | 布尔型 | 当设置为 false 时,请求会立即返回,而不是在操作完成后返回。要监控操作状态,请使用 任务 API 和请求返回的任务 ID。默认值为 true 。 |
task_execution_timeout | 时间 | 明确的任务执行超时时间。仅当 wait_for_completion 设置为 false 时有用。默认值为 1h 。 |
请求正文字段
您可以使用请求体为目标索引配置一些索引设置。所有字段都是可选的。
字段 | 类型 | 描述 |
---|---|---|
alias | 对象 | 为目标索引设置别名。可包含 filter 、index_routing 、is_hidden 、is_write_index 、routing 或 search_routing 字段。请参阅索引别名。 |
settings | 对象 | 您可以应用于目标索引的索引设置。请参阅索引设置。 |
max_shard_size | 字节 | 指定目标索引中主分片的最大大小。由于 max_shard_size 与 index.number_of_shards 设置冲突,您不能同时设置它们。 |
max_shard_size
参数
max_shard_size
参数指定目标索引中主分片的最大大小。OpenSearch 使用 max_shard_size
和源索引中所有主分片的总存储空间来计算目标索引的主分片数量及其大小。
目标索引的主分片数量是源索引主分片数量的最小因子,且分片大小不超过 max_shard_size
。例如,如果源索引有 8 个主分片,它们总共占用 400 GB 存储空间,并且 max_shard_size
等于 150 GB,OpenSearch 将使用以下算法计算目标索引中的主分片数量:
- 计算最小主分片数量为 400/150,四舍五入到最接近的整数。最小主分片数量为 3。
- 计算主分片数量为 8 的最小因子且大于 3。主分片数量为 4。
目标索引的最大主分片数量等于源索引中的主分片数量,因为收缩操作用于减少主分片数量。例如,考虑一个源索引有 5 个主分片,总共占用 600 GB 存储空间。如果 max_shard_size
为 100 GB,则最小主分片数量为 600/100,即 6。但是,由于源索引中的主分片数量小于 6,因此目标索引中的主分片数量设置为 5。
目标索引的最小主分片数量为 1。
索引编解码器注意事项
有关索引编解码器的注意事项,请参阅索引编解码器。
请求示例
POST /my-old-index/_shrink/my-new-index
{
"settings": {
"index.number_of_replicas": 4,
"index.number_of_shards": 3
},
"aliases":{
"new-index-alias": {}
}
}