首页/数据/NoSQL 速查/别名_aliases 管理与切换
Elasticsearch89 条

别名_aliases 管理与切换

别名指向一个或多个索引,用于读写解耦与零停机切换:写入别名用 is_write_index 指定唯一写目标,过滤别名可限定可见数据范围。

NoSQL 速查数据更新于 2026-10-13

别名是什么

别名(alias)是指向一个或多个索引的虚拟名称,用于读写解耦与零停机切换。写入别名用 is_write_index 指定唯一的写目标,读别名可以同时覆盖新旧索引从而平滑迁移;过滤别名能把别名限定在部分文档上,路由别名则能减少写入时的分片广播。应用只认别名,索引的滚动与重建对业务透明。

基本信息

接口POST /_aliases,actions 数组原子批量增删
写别名add 时设 is_write_index: true,同一别名只能有一个写索引
过滤别名filter 字段把别名限定在部分文档上
路由别名routing 绑定固定路由值,减少写入分片广播
查看GET /<index>/_alias 或 GET /_alias/<名称>
适用版本Elasticsearch 7.x / 8.x

典型使用场景

  • 索引滚动:新索引建好后把写别名切过去
  • 迁移重建:新索引灌完数据后用别名原子切换
  • 多索引联合查询:一个别名覆盖按日期的多个索引
  • 按租户或地区拆分:过滤别名只暴露部分文档
  • 灰度验证:新旧索引同时挂在读别名下做结果比对
  • 简化业务配置:应用侧只配别名,不关心索引命名

示例

示例
POST /_aliases
{
  "actions": [
    { "add": { "index": "logs-000002", "alias": "logs", "is_write_index": true } },   # 新索引作为写目标
    { "remove": { "index": "logs-000001", "alias": "logs" } },                        # 旧索引摘掉写标记
    { "add": { "index": "logs-000001", "alias": "logs_read" } }                       # 保留只读访问
  ]
}

GET /logs/_alias                     # 查看别名指向
GET /logs/_search                    # 业务侧只查别名

别名类型与用途

类型关键参数用途
写别名is_write_index指定唯一写入目标
读别名无同时覆盖多个索引
过滤别名filter只暴露部分文档
路由别名routing减少写入分片广播
滚动别名配合 ILM rollover写入永远指向最新索引
同一别名在同一时刻只能有一个写索引,重复指定会报错;切换写目标时先在动作里把新索引设为写索引。
别名操作通过 _aliases 的 actions 一次性提交是原子的,避免先删后加造成中间状态;切换完成后可用 GET /_alias 核对指向。
GET /<alias>/_search 会同时查询别名下所有索引,滚动期间新旧数据可能重复出现;确认无冗余后再移除旧索引上的别名。

易错点

  • 一个别名在同一时刻只能有一个写索引,重复指定会直接报错
  • 用别名查询会同时命中别名下所有索引,切换期间新旧数据可能重复出现
  • 切换写别名前没确认新索引已就绪,写入会落到还没建好映射的索引上
  • 删除索引时忘了同时清理别名指向,后续查询别名会报索引不存在
  • 把过滤别名当权限控制使用并不安全,它只影响查询范围,不能替代认证与授权

数据来源与参考

  • Elasticsearch Guide: Aliases
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌