--- title: "管理索引别名" date: 2026-01-08 lastmod: 2026-01-08 description: "批量执行索引别名操作,支持添加、删除别名和删除索引" tags: ["索引管理", "别名", "索引别名"] summary: "批量执行索引别名操作,在单个请求中完成多个别名的添加、删除或索引删除操作。 API # POST /_aliases API 的作用 # 该 API 允许在单个原子操作中执行多个别名相关的操作: 操作类型 描述 add 为索引添加别名 remove 从索引删除别名 remove_index 删除索引及其所有别名 使用场景 # 场景 描述 零停机重建 在新旧索引间切换别名 批量管理 一次性管理多个别名 时间序列 动态添加/移除时间索引 API 的参数 # 请求体参数 # { "actions": [ { "add": { "indices": ["index1", "index2"], "alias": "alias1", "filter": { ." --- 批量执行索引别名操作,在单个请求中完成多个别名的添加、删除或索引删除操作。 ## API ``` POST /_aliases ``` ## API 的作用 该 API 允许在单个原子操作中执行多个别名相关的操作: | 操作类型 | 描述 | |----------|------| | **add** | 为索引添加别名 | | **remove** | 从索引删除别名 | | **remove_index** | 删除索引及其所有别名 | ### 使用场景 | 场景 | 描述 | |------|------| | **零停机重建** | 在新旧索引间切换别名 | | **批量管理** | 一次性管理多个别名 | | **时间序列** | 动态添加/移除时间索引 | ## API 的参数 ### 请求体参数 ```json { "actions": [ { "add": { "indices": ["index1", "index2"], "alias": "alias1", "filter": { ... }, "routing": "value", "index_routing": "value", "search_routing": "value", "is_write_index": true, "is_hidden": false } }, { "remove": { "indices": ["index1"], "alias": "alias1" } }, { "remove_index": { "indices": ["index1"] } } ] } ``` | 参数 | 类型 | 是否必填 | 描述 | |------|------|----------|------| | `actions` | 数组 | 必需 | 操作数组 | | `add` | 对象 | 否 | 添加别名操作 | | `remove` | 对象 | 否 | 删除别名操作 | | `remove_index` | 对象 | 否 | 删除索引操作 | | `indices` | 列表 | add/remove 必需 | 目标索引列表 | | `alias` | 字符串 | add/remove 必需 | 别名名称 | | `filter` | 对象 | 否 | 过滤查询 | | `routing` | 字符串 | 否 | 默认路由值 | | `index_routing` | 字符串 | 否 | 索引操作的路由值 | | `search_routing` | 字符串 | 否 | 搜索操作的路由值 | | `is_write_index` | 布尔值 | 否 | 是否为写入索引 | | `is_hidden` | 布尔值 | 否 | 是否隐藏别名 | ### Query String 参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `timeout` | 时间值 | 否 | - | 等待响应的超时时间 | | `master_timeout` | 时间值 | 否 | - | 等待主节点响应的超时时间 | ## 示例 ### 添加单个别名 ```bash POST /_aliases { "actions": [ { "add": { "index": "logs-2024-01", "alias": "logs_current" } } ] } ``` **响应:** ```json { "acknowledged": true } ``` ### 添加多索引别名 ```bash POST /_aliases { "actions": [ { "add": { "indices": ["logs-2024-01", "logs-2024-02"], "alias": "logs_current" } } ] } ``` ### 添加带过滤器的别名 ```bash POST /_aliases { "actions": [ { "add": { "index": "logs", "alias": "error_logs", "filter": { "term": { "level": "ERROR" } } } } ] } ``` ### 添加带路由的别名 ```bash POST /_aliases { "actions": [ { "add": { "index": "my_index", "alias": "routed_alias", "routing": "user1", "index_routing": "user1", "search_routing": "user1,user2" } } ] } ``` ### 设置写入索引 ```bash POST /_aliases { "actions": [ { "add": { "index": "index_v2", "alias": "my_index", "is_write_index": true } }, { "add": { "index": "index_v1", "alias": "my_index", "is_write_index": false } } ] } ``` ### 删除别名 ```bash POST /_aliases { "actions": [ { "remove": { "index": "logs-2023-12", "alias": "logs_current" } } ] } ``` ### 零停机索引重建 ```bash # 1. 创建新索引并加载数据 PUT /products_v2 POST /_reindex { "source": { "index": "products_v1" }, "dest": { "index": "products_v2" } } # 2. 切换别名 POST /_aliases { "actions": [ { "remove": { "index": "products_v1", "alias": "products" } }, { "add": { "index": "products_v2", "alias": "products" } } ] } ``` ### 批量操作多个别名 ```bash POST /_aliases { "actions": [ { "add": { "index": "logs-2024-02", "alias": "logs_current" } }, { "remove": { "index": "logs-2023-12", "alias": "logs_current" } }, { "add": { "index": "logs-2024-01", "alias": "errors", "filter": { "term": { "level": "ERROR" } } } } ] } ``` ### 删除索引及其别名 ```bash POST /_aliases { "actions": [ { "remove_index": { "index": "old_index" } } ] } ``` ### 时间序列索引滚动 ```bash # 创建新月份索引并更新别名 PUT /logs-2024-03 POST /_aliases { "actions": [ { "remove": { "index": "logs-2024-01", "alias": "logs_current" } }, { "add": { "index": "logs-2024-03", "alias": "logs_current" } } ] } ``` ### 多个写入索引配置 ```bash POST /_aliases { "actions": [ { "add": { "indices": ["index1", "index2"], "alias": "search_alias" } }, { "add": { "index": "index2", "alias": "write_alias", "is_write_index": true } } ] } ``` ## 响应字段说明 | 字段 | 描述 | |------|------| | `acknowledged` | 是否确认成功 | ## 使用场景 ### 场景 1:零停机部署 ```bash # 完整的零停机重建流程 PUT /api_v2 # 同步数据 POST /_reindex { "source": { "index": "api_v1" }, "dest": { "index": "api_v2" }, "wait_for_completion": false } # 等待同步完成后切换别名 POST /_aliases { "actions": [ { "remove": { "index": "api_v1", "alias": "api" } }, { "add": { "index": "api_v2", "alias": "api" } } ] } ``` ### 场景 2:日志索引滚动 ```bash # 每月创建新索引并更新别名 PUT /logs-2024-03 POST /_aliases { "actions": [ { "remove": { "index": "logs-2024-01", "alias": "logs" } }, { "add": { "index": "logs-2024-03", "alias": "logs" } } ] } ``` ### 场景 3:过滤视图 ```bash # 为不同日志级别创建别名 POST /_aliases { "actions": [ { "add": { "index": "logs", "alias": "error_logs", "filter": { "term": { "level": "ERROR" } } } }, { "add": { "index": "logs", "alias": "warn_logs", "filter": { "term": { "level": "WARN" } } } } ] } ``` ### 场景 4:读写分离 ```bash # 读写分离配置 POST /_aliases { "actions": [ { "add": { "indices": ["index_v1", "index_v2"], "alias": "index_read" } }, { "add": { "index": "index_v2", "alias": "index_write", "is_write_index": true } } ] } ``` ### 场景 5:多租户系统 ```bash # 为租户创建独立别名 POST /_aliases { "actions": [ { "add": { "index": "data", "alias": "tenant1", "filter": { "term": { "tenant_id": "tenant1" } }, "routing": "tenant1" } }, { "add": { "index": "data", "alias": "tenant2", "filter": { "term": { "tenant_id": "tenant2" } }, "routing": "tenant2" } } ] } ``` ## 注意事项 1. **原子性**:actions 数组中的操作是原子执行的,要么全部成功,要么全部失败 2. **写入索引**:一个别名只能有一个写入索引 3. **别名顺序**:先 remove 后 add 可以避免别名冲突 4. **索引存在性**:索引必须存在才能添加别名 5. **性能影响**:大量操作可能需要较长执行时间 ## 常见错误 ### 别名已存在 ```json { "error": { "type": "invalid_alias_name_exception", "reason": "Invalid alias name [logs], already exists" } } ``` ### 多个写入索引 ```json { "error": { "type": "illegal_argument_exception", "reason": "Alias [my_index] has more than one write index" } } ``` ### 索引不存在 ```json { "error": { "type": "index_not_found_exception", "reason": "no such index [nonexistent_index]" } } ```