当前位置: 首页 > news >正文

深入解析:【Elasticsearch】索引别名 aliases

索引别名

  • 1.错误演示
    • 1.1 当前状态:
    • 1.2 执行以下命令会报错
  • ✅ 2.解决方案
    • 2.1 方案 1:先移除旧索引的写入权限,再设置新索引
    • 2.2 方案 2:使用原子操作一次性切换
    • 2.3 方案 3:创建时不设置写入索引,后续再切换
  • 3.验证当前状态
    • 3.1 查看别名指向的所有索引
    • 3.2 查看哪个索引是当前写入索引
    • 3.3 查看所有包含写入索引的别名
  • 4.实际应用场景
    • 4.1 场景:基于时间的索引滚动
    • 4.2 场景:索引重建
  • 5.总结

在博文《【Elasticsearch】动手创建一个索引》中,我们创建了一个名为 test-index 的索引,并且指定索引别名为 log-index,同时设置其为写入索引。

如果此时我再次建立一个索引,名称为 test-index-01,别名为 log-index,也指定为写入索引,会发生什么呢?

您说得完全正确!这会报错,因为一个别名在同一时间只能指向一个作为写入索引的索引。

1.错误演示

1.1 当前状态:

1.2 执行以下命令会报错

PUT /test-index-01
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"refresh_interval": "15s"
},
"aliases": {
"log-index": {
"is_write_index": true  // ← 冲突!
}
},
"mappings": {
"properties": {
// ... 字段定义
}
}
}

错误信息类似:
在这里插入图片描述

✅ 2.解决方案

如果想要切换写入索引,有以下几种正确的做法。

2.1 方案 1:先移除旧索引的写入权限,再设置新索引

// 步骤1:移除旧索引的写入权限
POST /_aliases
{
"actions": [
{
"add": {
"index": "test-index",
"alias": "log-index",
"is_write_index": false
}
}
]
}
// 步骤2:创建新索引并设置为写入索引
PUT /test-index-01
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"refresh_interval": "15s"
},
"aliases": {
"log-index": {
"is_write_index": true
}
},
"mappings": {
"properties": {
"timestamp": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||epoch_millis"
},
"message": {
"type": "text",
"analyzer": "ik_max_word"
}
// ... 其他字段
}
}
}

2.2 方案 2:使用原子操作一次性切换

POST /_aliases
{
"actions": [
{
"add": {
"index": "test-index-01",
"alias": "log-index",
"is_write_index": true
}
},
{
"add": {
"index": "test-index",
"alias": "log-index",
"is_write_index": false
}
}
]
}

2.3 方案 3:创建时不设置写入索引,后续再切换

// 步骤1:创建新索引(不设置写入索引)
PUT /test-index-01
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"refresh_interval": "15s"
},
"aliases": {
"log-index": {}  // ← 只添加别名,不设置写入索引
},
"mappings": {
// ... 字段定义
}
}
// 步骤2:原子切换写入索引
POST /_aliases
{
"actions": [
{
"add": {
"index": "test-index-01",
"alias": "log-index",
"is_write_index": true
}
},
{
"add": {
"index": "test-index",
"alias": "log-index",
"is_write_index": false
}
}
]
}

3.验证当前状态

在执行任何操作前,您可以先检查当前别名状态:

3.1 查看别名指向的所有索引

GET /_alias/log-index

在这里插入图片描述

3.2 查看哪个索引是当前写入索引

GET /_cat/aliases/log-index?v

在这里插入图片描述

3.3 查看所有包含写入索引的别名

GET /_cat/aliases?v&filter_path=is_write_index:true

在这里插入图片描述

4.实际应用场景

这种设计在以下场景中很有用:

4.1 场景:基于时间的索引滚动

# 第1个月:logs-2024-01 是写入索引
# 第2个月:切换到 logs-2024-02 为写入索引
# 第3个月:切换到 logs-2024-03 为写入索引
# 但应用程序始终使用别名 "logs" 写入
  • 1️⃣ 设置 logs-2024-01 为写入索引。

在这里插入图片描述

  • 2️⃣ 通过别名往索引中写入数据。

在这里插入图片描述

  • 3️⃣ 可以看到此时数据写入了 logs-2024-01

在这里插入图片描述

  • 4️⃣ 切换写入索引为 logs-2024-02

在这里插入图片描述

  • 5️⃣ 可以看到 logs-2024-02 此时已成为别名 logs 的写入索引了。

在这里插入图片描述

  • 6️⃣ 再次通过索引别名往索引中写入数据。

在这里插入图片描述

  • 7️⃣ 可以观察到,此时写入的数据已经存储到了 logs-2024-02 中。

在这里插入图片描述

4.2 场景:索引重建

# 阶段1:products-v1 是写入索引
# 阶段2:创建 products-v2,数据迁移
# 阶段3:切换写入索引到 products-v2
# 阶段4:下线 products-v1

5.总结

  • 一个别名可以指向多个索引
  • 但只能有一个索引设置为 is_write_index: true
  • 切换写入索引需要使用原子操作
  • 应用程序可以始终使用别名,无需关心底层索引变化

这种机制正是 Elasticsearch 实现索引滚动、零停机重建等高级功能的基础。

http://www.jsqmd.com/news/144751/

相关文章:

  • 5MW风电永磁直驱发电机-1200V直流并网Simulink仿真模型
  • 告别无效调用:高效实现 AI Agent 的 Function 交互设计
  • 高中语法练习解析100篇-005-Huaweis Green 5G Development Strategy 华为的绿色5G发展战略 - new
  • Spring Boot+MyBatis:用 PageHelper 实现 Oracle 12c 的 OFFSET 分页
  • LSTM量化交易策略的环境适应性与入参稳定性评估
  • 动态可视化报告制作:DeepSeek+Mermaid生成交互式流程图/甘特图
  • 区间 LCS/LIS
  • 具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(PO-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)
  • Day51_图论2.md
  • 计算机毕设项目之基于Springboot vue的社区养老服务小程序
  • 基于HHO-KRR的多输入回归预测(哈里斯鹰优化核岭回归)附Matlab代码
  • 强化学习结合LSTM的量化交易策略奖励函数与入参关联
  • 【电缆】中压电缆局部放电的传输模型研究(Matlab代码实现)
  • CSV大文件处理全流程:数据清洗、去重与格式标准化深度实践
  • 2026企业微信SCRM新趋势:AI如何助力客户转化率提升300%
  • ue python脚本 获取资产
  • 2025年12月江苏徐州变压器系列、智能变电站、新能源配套、高低压配电柜、智慧电力系统推荐榜单:顶尖企业综合评估 - 2025年品牌推荐榜
  • 杭州品牌策略公司概述
  • 【车辆控制】基于模型预测控制MPC的摩托车主动悬挂控制附Matlab代码
  • 使用 PMU(相量测量单元)进行电力系统状态估计【IEEE-14、IEEE30节点】(Matlab代码实现)
  • 学长亲荐8个AI论文工具,自考毕业论文格式规范必备!
  • 基于IWOA-GRNN的激光熔覆质量预测建模方法附Matlab代码
  • zz为什么样本方差无偏估计要除以n-1
  • 云舟观测报表管理功能:从业务到智能运维
  • 【论道】组件封装原则
  • NC verilog :force命令
  • 基于大数据的教育评价与研究成果的可视化分析系统(毕设源码+文档)
  • 天猫代运营TP是什么意思?
  • Catalan数
  • 024.二叉树层序遍历