--- title: "关闭索引" date: 2026-02-08 lastmod: 2026-02-08 description: "关闭一个或多个索引,释放集群资源但保留磁盘数据" tags: ["索引管理", "索引操作"] summary: "关闭一个或多个索引,使其不再响应读写请求,但保留磁盘数据。 API # POST /{index}/_close POST /_close API 的作用 # 该 API 用于关闭索引。关闭的索引: 不再响应读写请求 不占用内存资源 保留磁盘数据 可以通过 _open API 重新打开 使用场景 # 保留历史数据但不需要频繁访问 释放集群内存资源 暂时禁用某些索引 批量操作前的准备工作 注意:关闭的索引仍占用磁盘空间,并且可能占用集群状态空间(每个索引约占用几KB)。 API 的参数 # 路由参数 # 参数 类型 是否必填 描述 {index} 字符串 必需 要关闭的索引名称。支持:单个索引、逗号分隔的多个索引、通配符表达式 Query String 参数 # 参数 类型 是否必填 默认值 描述 master_timeout 时间值 否 30s 等待主节点操作的超时时间 timeout 时间值 否 无 等待操作完成的超时时间 wait_for_active_shards 字符串 否 0 等待指定数量的分片变为活跃状态 ignore_unavailable 布尔值 否 false 是否忽略不存在的索引 allow_no_indices 布尔值 否 false 当没有匹配的索引时是否允许操作成功 示例 # 关闭单个索引 # POST /my_index/_close 响应示例:" --- 关闭一个或多个索引,使其不再响应读写请求,但保留磁盘数据。 ## API ``` POST /{index}/_close POST /_close ``` ## API 的作用 该 API 用于关闭索引。关闭的索引: - 不再响应读写请求 - 不占用内存资源 - 保留磁盘数据 - 可以通过 `_open` API 重新打开 ### 使用场景 - 保留历史数据但不需要频繁访问 - 释放集群内存资源 - 暂时禁用某些索引 - 批量操作前的准备工作 > **注意**:关闭的索引仍占用磁盘空间,并且可能占用集群状态空间(每个索引约占用几KB)。 ## API 的参数 ### 路由参数 | 参数 | 类型 | 是否必填 | 描述 | |------|------|----------|------| | `{index}` | 字符串 | 必需 | 要关闭的索引名称。支持:单个索引、逗号分隔的多个索引、通配符表达式 | ### Query String 参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `master_timeout` | 时间值 | 否 | 30s | 等待主节点操作的超时时间 | | `timeout` | 时间值 | 否 | 无 | 等待操作完成的超时时间 | | `wait_for_active_shards` | 字符串 | 否 | 0 | 等待指定数量的分片变为活跃状态 | | `ignore_unavailable` | 布尔值 | 否 | false | 是否忽略不存在的索引 | | `allow_no_indices` | 布尔值 | 否 | false | 当没有匹配的索引时是否允许操作成功 | ## 示例 ### 关闭单个索引 ```bash POST /my_index/_close ``` **响应示例:** ```json { "acknowledged": true, "shards_acknowledged": true } ``` ### 关闭多个索引 ```bash POST /index1,index2/_close ``` ### 使用通配符关闭索引 ```bash POST /logs-2025-*/_close ``` ### 关闭所有索引 ```bash POST /*/_close ``` 或 ```bash POST /_all/_close ``` ### 设置超时时间 ```bash POST /my_index/_close?timeout=1m&master_timeout=30s ``` ### 忽略不存在的索引 ```bash POST /index1,nonexistent/_close?ignore_unavailable=true ``` ### 等待分片活跃 ```bash POST /my_index/_close?wait_for_active_shards=all ``` ## wait_for_active_shards 参数说明 | 值 | 描述 | |----|------| | `0` | 不等待分片(默认) | | `all` | 等待所有分片活跃 | | `数字` | 等待指定数量的分片活跃 | | `default` | 使用索引的默认副本数 | ## 关闭索引的限制 可以通过集群设置控制是否允许关闭索引: ```bash PUT /_cluster/settings { "persistent": { "cluster.indices.close.enable": false } } ``` 如果关闭功能被禁用,会返回错误: ``` closing indices is disabled - set [cluster.indices.close.enable: true] to enable it. NOTE: closed indices still consume a significant amount of diskspace ``` ## 使用场景 ### 场景 1:归档旧数据 ```bash # 关闭去年的日志索引以释放内存 POST /logs-2024-*/_close ``` ### 场景 2:批量操作前准备 ```bash # 关闭索引 POST /my_index/_close # 更新设置 PUT /my_index/_settings { "index": { "number_of_replicas": 2 } } # 重新打开 POST /my_index/_open ``` ### 场景 3:暂时禁用索引 ```bash # 关闭临时不需要的索引 POST /temp_index/_close # 需要时重新打开 POST /temp_index/_open ``` ## 关闭索引的影响 | 资源 | 影响 | |------|------| | 内存 | 释放相关内存 | | 磁盘 | 数据保留,不释放空间 | | 集群状态 | 每个关闭的索引占用约几KB | | 查询 | 关闭的索引不会被搜索 | | 写入 | 关闭的索引不能写入数据 | | 分片 | 分片被卸载,不占用节点资源 | ## 注意事项 1. **磁盘空间**:关闭的索引仍占用磁盘空间 2. **集群状态**:大量关闭的索引会增加集群状态大小 3. **重新打开**:重新打开索引需要时间来恢复分片 4. **生产数据**:建议对重要数据先创建快照再关闭 5. **快照**:可以对关闭的索引创建快照 6. **删除**:删除索引比关闭索引更能释放资源 ## 关闭 vs 删除 | 操作 | 磁盘数据 | 内存占用 | 可恢复性 | |------|----------|----------|----------| | 关闭 | 保留 | 释放 | 可重新打开 | | 删除 | 删除 | 释放 | 需从备份恢复 | 如果不再需要索引数据,建议使用删除操作而非关闭操作。