--- title: "打开索引" date: 2026-02-03 lastmod: 2026-02-03 description: "打开一个或多个已关闭的索引,使其恢复正常功能" tags: ["索引管理", "索引操作"] summary: "打开一个或多个已关闭的索引,使其恢复正常功能。 API # POST /{index}/_open POST /_all/_open API 的作用 # 该 API 用于打开已关闭的索引。关闭的索引不会响应读写请求,也不会占用集群资源。使用 _open API 可以: 重新打开关闭的索引 恢复索引的读写操作 重新分配索引的分片 使索引可以正常被搜索 关闭 vs 打开索引 # 状态 描述 打开 (Open) 索引正常工作,可以读写和搜索 关闭 (Close) 索引不响应请求,不占用内存,但保留磁盘数据 API 的参数 # 路由参数 # 参数 类型 是否必填 描述 {index} 字符串 必需 要打开的索引名称。支持:单个索引、逗号分隔的多个索引、通配符表达式、_all 或 *(所有索引) Query String 参数 # 参数 类型 是否必填 默认值 描述 timeout 时间值 否 无 显式操作超时时间 master_timeout 时间值 否 无 连接到主节点的超时时间 ignore_unavailable 布尔值 否 false 是否忽略不可用(缺失或关闭)的索引 allow_no_indices 布尔值 否 false 当通配符没有匹配到索引时是否忽略 expand_wildcards 枚举值 否 open 如何展开通配符。可选值:open、closed、all wait_for_active_shards 字符串 否 1 在操作返回之前等待的活跃分片数 示例 # 打开单个索引 # POST /my_index/_open 响应示例:" --- 打开一个或多个已关闭的索引,使其恢复正常功能。 ## API ``` POST /{index}/_open POST /_all/_open ``` ## API 的作用 该 API 用于打开已关闭的索引。关闭的索引不会响应读写请求,也不会占用集群资源。使用 `_open` API 可以: - 重新打开关闭的索引 - 恢复索引的读写操作 - 重新分配索引的分片 - 使索引可以正常被搜索 ### 关闭 vs 打开索引 | 状态 | 描述 | |------|------| | **打开 (Open)** | 索引正常工作,可以读写和搜索 | | **关闭 (Close)** | 索引不响应请求,不占用内存,但保留磁盘数据 | ## API 的参数 ### 路由参数 | 参数 | 类型 | 是否必填 | 描述 | |------|------|----------|------| | `{index}` | 字符串 | 必需 | 要打开的索引名称。支持:单个索引、逗号分隔的多个索引、通配符表达式、`_all` 或 `*`(所有索引) | ### Query String 参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `timeout` | 时间值 | 否 | 无 | 显式操作超时时间 | | `master_timeout` | 时间值 | 否 | 无 | 连接到主节点的超时时间 | | `ignore_unavailable` | 布尔值 | 否 | false | 是否忽略不可用(缺失或关闭)的索引 | | `allow_no_indices` | 布尔值 | 否 | false | 当通配符没有匹配到索引时是否忽略 | | `expand_wildcards` | 枚举值 | 否 | open | 如何展开通配符。可选值:`open`、`closed`、`all` | | `wait_for_active_shards` | 字符串 | 否 | 1 | 在操作返回之前等待的活跃分片数 | ## 示例 ### 打开单个索引 ```bash POST /my_index/_open ``` **响应示例:** ```json { "acknowledged": true, "shards_acknowledged": true } ``` ### 打开多个索引 ```bash POST /index1,index2/_open ``` ### 使用通配符打开索引 ```bash POST /logs-*/_open ``` ### 打开所有索引 ```bash POST /_all/_open ``` 或 ```bash POST /*/_open ``` ### 等待所有分片活跃 ```bash POST /my_index/_open?wait_for_active_shards=all ``` ### 等待指定数量的分片活跃 ```bash POST /my_index/_open?wait_for_active_shards=2 ``` ### 设置超时时间 ```bash POST /my_index/_open?timeout=5m ``` ### 只打开关闭的索引 ```bash POST /*/_open?expand_wildcards=closed ``` ### 忽略不存在的索引 ```bash POST /index1,nonexistent/_open?ignore_unavailable=true ``` ### 组合参数使用 ```bash POST /logs-*/_open?expand_wildcards=closed&wait_for_active_shards=all&timeout=2m ``` ## expand_wildcards 参数说明 | 值 | 描述 | |----|------| | `open` | 只展开到打开的索引(默认) | | `closed` | 只展开到关闭的索引 | | `all` | 展开到所有索引(打开和关闭) | ## wait_for_active_shards 参数说明 | 值 | 描述 | |----|------| | `1` 或 `default` | 只等待主分片变为活跃(默认) | | `all` | 等待所有分片(主分片和副本)都活跃 | | `数字` | 等待指定数量的分片变为活跃 | ## 响应字段说明 | 字段 | 类型 | 描述 | |------|------|------| | `acknowledged` | 布尔值 | 操作是否被主节点确认 | | `shards_acknowledged` | 布尔值 | 是否所有相关分片在操作返回前变为活跃状态 | ## 使用场景 ### 场景 1:重新启用归档索引 ```bash # 打开旧的日志索引以便查询 POST /logs-2025-*/_open ``` ### 场景 2:批量操作后恢复索引 ```bash # 关闭索引进行配置更新 POST /my_index/_close # 更新设置 PUT /my_index/_settings { "index": { "refresh_interval": "5s" } } # 重新打开索引 POST /my_index/_open ``` ### 场景 3:分阶段恢复索引 ```bash # 只打开部分索引以避免资源压力 POST /archive-2025-01/_open?wait_for_active_shards=all ``` ## 注意事项 1. **资源消耗**:打开索引会重新分配分片并占用内存 2. **集群健康**:打开大量索引可能影响集群健康状态 3. **分片恢复**:打开索引后需要等待分片恢复完成才能正常使用 4. **副本分配**:副本分片可能需要时间来完成分配 5. **性能影响**:建议在低峰期打开大量索引