从索引中删除别名,释放别名名称或更新索引-别名映射关系。
API #
DELETE /{index}/_alias/{name}
DELETE /{index}/_alias/{name}
DELETE /{index}/_alias/{name}
DELETE /_alias/{name}
DELETE /_alias/{name}
API 的作用 #
从索引中删除别名,移除别名与索引的关联关系。
删除方式 #
| API | 用途 |
|---|---|
DELETE /{index}/_alias/{name} | 从指定索引删除别名 |
DELETE /_alias/{name} | 删除别名(需指定索引参数) |
删除的影响 #
| 情况 | 影响 |
|---|---|
| 别名指向单个索引 | 删除后别名不再存在 |
| 别名指向多个索引 | 只从指定索引解除关联,别名仍指向其他索引 |
| 应用使用别名 | 应用将无法通过别名访问已删除的索引 |
API 的参数 #
DELETE /{index}/_alias/{name} 参数 #
路由参数 #
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
{index} | 字符串 | 必需 | 索引名称,支持逗号分隔多个索引或通配符 |
{name} | 字符串 | 必需 | 要删除的别名名称 |
Query String 参数 #
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
timeout | 时间值 | 否 | - | 等待响应的超时时间 |
master_timeout | 时间值 | 否 | - | 等待主节点响应的超时时间 |
DELETE /_alias/{name} 参数 #
路由参数 #
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
{name} | 字符串 | 必需 | 要删除的别名名称 |
Query String 参数 #
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
index | 列表 | 必需* | - | 要从中删除别名的索引名称(逗号分隔) |
timeout | 时间值 | 否 | - | 等待响应的超时时间 |
master_timeout | 时间值 | 否 | - | 等待主节点响应的超时时间 |
示例 #
基本删除 #
DELETE /my_index/_alias/my_alias
响应:
{
"acknowledged": true
}
从多个索引删除别名 #
DELETE /index1,index2/_alias/shared_alias
使用通配符删除 #
DELETE /logs-*/_alias/temp_alias
使用 DELETE /_alias/{name} 删除 #
DELETE /_alias/my_alias?index=my_index
从多个索引删除(使用 URL 参数) #
DELETE /_alias/shared_alias?index=index1,index2,index3
零停机索引切换(删除旧关联) #
# 1. 新索引已创建并添加别名
PUT /products_v2/_alias/products
# 2. 从旧索引删除别名
DELETE /products_v1/_alias/products
设置超时时间 #
DELETE /my_index/_alias/my_alias?timeout=30s
批量删除多个别名 #
# 删除多个别名
DELETE /my_index/_alias/alias1,alias2,alias3
从多个索引删除特定别名 #
DELETE /index1,index2,index3/_alias/old_alias
使用通配符删除多个别名 #
DELETE /my_index/_alias/temp_*
验证删除 #
# 删除前检查
HEAD /my_index/_alias/my_alias
# 执行删除
DELETE /my_index/_alias/my_alias
# 删除后验证
HEAD /my_index/_alias/my_alias
# 返回 404 Not Found
删除时间序列索引的别名 #
# 从历史索引中删除当前别名
DELETE /logs-2023-*/_alias/logs_current
清理临时别名 #
# 删除所有临时别名
DELETE /_alias/temp_*
删除前先检查别名存在 #
# 检查别名
GET /my_index/_alias/*
# 如果存在则删除
DELETE /my_index/_alias/my_alias
使用管理 API 批量删除 #
# 更灵活的方式:使用管理索引别名 API
POST /_aliases
{
"actions": [
{
"remove": {
"indices": ["index1", "index2"],
"aliases": ["alias1", "alias2"]
}
}
]
}
响应字段说明 #
| 字段 | 描述 |
|---|---|
acknowledged | 是否确认成功 |
使用场景 #
场景 1:零停机索引切换 #
# 完整的切换流程
PUT /products_v2
POST /_reindex
{
"source": { "index": "products_v1" },
"dest": { "index": "products_v2" }
}
PUT /products_v2/_alias/products
DELETE /products_v1/_alias/products
场景 2:索引滚动更新 #
# 新月份索引上线
PUT /logs-2024-03/_alias/logs_current
# 从旧索引移除别名
DELETE /logs-2024-01/_alias/logs_current
场景 3:清理过期别名 #
# 删除不再使用的别名
DELETE /archive_2023-*/_alias/current
场景 4:环境迁移 #
# 从测试环境移除生产别名
DELETE /test_*/_alias/prod
场景 5:重构别名结构 #
# 删除旧结构别名
DELETE /old_index_*/_alias/old_alias
# 创建新结构别名
PUT /new_index/_alias/new_alias
场景 6:多索引别名清理 #
# 从多个索引删除特定别名
DELETE /logs-2024-01,logs-2024-02/_alias/temp_search
场景 7:回滚操作 #
# 撤销别名更改
DELETE /new_index/_alias/production
PUT /old_index/_alias/production
注意事项 #
- 别名存在性:删除不存在的别名会返回错误
- 多索引别名:如果别名指向多个索引,只从指定索引删除
- 应用影响:确保应用不再使用已删除的别名
- 原子操作:使用 POST /_aliases 可实现多个删除的原子操作
- 验证删除:使用 HEAD 请求验证别名是否已删除
常见错误 #
别名不存在 #
{
"error": {
"type": "alias_not_found_exception",
"reason": "alias [nonexistent] not found"
}
}
解决:先检查别名是否存在
GET /_alias/nonexistent
索引不存在 #
{
"error": {
"type": "index_not_found_exception",
"reason": "no such index [nonexistent_index]"
}
}
解决:确保索引存在
别名不在指定索引上 #
DELETE /index1/_alias/my_alias
# 如果 my_alias 不在 index1 上
响应:
{
"error": {
"type": "alias_not_found_exception",
"reason": "alias [my_alias] not found for index [index1]"
}
}
解决:检查别名与索引的关联关系
缺少索引参数 #
DELETE /_alias/my_alias
# 缺少 index 参数
响应:
{
"error": {
"type": "illegal_argument_exception",
"reason": "index is required"
}
}
解决:添加 index 参数
DELETE /_alias/my_alias?index=my_index
最佳实践 #
1. 删除前验证 #
# 检查别名配置
GET /my_index/_alias/my_alias
# 确认后删除
DELETE /my_index/_alias/my_alias
2. 使用管理 API 批量操作 #
# 批量删除多个别名
POST /_aliases
{
"actions": [
{ "remove": { "index": "index1", "alias": "alias1" } },
{ "remove": { "index": "index2", "alias": "alias2" } }
]
}
3. 零停机切换流程 #
# 1. 新索引准备
PUT /new_index
# 2. 数据同步
POST /_reindex
{
"source": { "index": "old_index" },
"dest": { "index": "new_index" }
}
# 3. 添加新别名
PUT /new_index/_alias/my_alias
# 4. 删除旧别名
DELETE /old_index/_alias/my_alias
# 5. 清理旧索引(可选)
DELETE /old_index
4. 监控删除操作 #
# 删除前后检查应用状态
curl -s 'http://localhost:9200/_cat/aliases?v' > before.txt
DELETE /my_index/_alias/my_alias
curl -s 'http://localhost:9200/_cat/aliases?v' > after.txt
diff before.txt after.txt
5. 自动化脚本 #
#!/bin/bash
# 安全删除别名脚本
ALIAS_NAME=$1
INDEX_NAME=$2
# 检查别名是否存在
if curl -s "localhost:9200/${INDEX_NAME}/_alias/${ALIAS_NAME}" | grep -q "\"${ALIAS_NAME}\""; then
echo "Deleting alias ${ALIAS_NAME} from ${INDEX_NAME}..."
curl -X DELETE "localhost:9200/${INDEX_NAME}/_alias/${ALIAS_NAME}"
echo "Done."
else
echo "Alias ${ALIAS_NAME} not found on ${INDEX_NAME}"
exit 1
fi
6. 回滚计划 #
# 保存当前别名配置
GET /_aliases > backup_aliases.json
# 执行删除操作
DELETE /my_index/_alias/my_alias
# 如需回滚,从备份恢复
POST /_aliases
{
"actions": [
{ "add": { "index": "my_index", "alias": "my_alias" } }
]
}





