Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. ElasticSearch
  3. 正文
                           

【别名】Elasticsearch基础但非常有用的功能之一:别名

2025-04-01 260点热度 0人点赞 0条评论

0、题记

本文是系列文章第一篇。介绍Elasticsearch的一些非常基础但实战开发确非常有用的技术点。了解这些技术点会帮助你设计更易于维护的数据索引,预先知道PB级大数据索引实战中的坑,提升工作效率。

本文从别名分类、索引别名实践、索引别名的好处、索引别名常见问题及坑解读、字段别名实践一把 五个方面进行详细解读。

1、别名分类

别名在Elasticsearch中有两种分类。

1.1 索引别名

官方释义: 索引别名可以指向一个或多个索引,并且可以在任何需要索引名称的API中使用。 别名为我们提供了极大的灵活性。它们允许我们执行以下操作: 

1)在正在运行的集群上的一个索引和另一个索引之间透明切换; 

2)对多个索引进行分组组合(例如,lastthreemonths的索引别名:是过去3个月索引 logstash201903, logstash201904, logstash_201905的组合);

 3)在索引中的文档子集上创建“视图”(结合业务场景,会提升检索效率)。

通俗解释: 索引别名类似:windows的快捷方式,linux的软链接,mysql的视图。

  • 前提:Elasitcsearch创建索引后,索引名不允许改。很多业务场景下单一索引可能无法满足要求。

  • 场景1:PB级别增量数据,借助rollover api实现,由基于日期的n个索引组成,显然,对外提供服务使用别名会很便捷。

  • 场景2:试想,线上提供服务的某个索引出了问题,比如:某字段分词定义不准确,如何保证对外提供服务不停止(不更改业务代码)的前提下更换索引,显然,别名更合适。

注意:实际业务场景使用别名会很方便、灵活、快捷、业务松耦合!!

1.2 字段别名

在Elasticsearch Mapping定义的6.4+版本才有的字段类型。 

通俗解释: 

试想一下有一种业务场景。比如在实际的业务开发中:需要对Facebook、twitter行采集,采集入库的是两个业务团队。

他们对content,分别使用了两个字段。其中一个是,content。另外一个是cont。 这时候存储到elasticsearch会有两个字段。

这样如果我们在检索、写业务代码的时候,是不是要写两个不同的字段来处理呢? 如果有可能写成一个字段,代码方面就很避开业务耦合,就很方便了。

我认为这是字段别名的由来。

2、索引别名实践

2.1 假设没有别名,如何处理多索引检索?

  • 方式一:多索引逗号分隔检索。

  1. POST visitor_logs_2017,visitor_logs_2018/_search

  • 方式二:通配符索引检索。

  1. POST visitor_logs_*/_search

2.2 有了别名后,操作变得简单

实战中,我们不需要知道操作的实际索引名称,我们可以透明地更改别名引用的索引而不会影响使用别名的用户。

  • 步骤1:别名关联已有索引。

  1. POST /_aliases?pretty

  2. {

  3. "actions": [

  4. {

  5. "add": {

  6. "index": "visitor_logs_2017",

  7. "alias": "visitor_logs"

  8. }

  9. },

  10. {

  11. "add": {

  12. "index": "visitor_logs_2018",

  13. "alias": "visitor_logs"

  14. }

  15. }

  16. ]

  17. }

  • 步骤2:使用别名检索

  1. GET /visitor_logs/_search

3、索引别名的好处

3.1 大数据量的管理

场景: 实战中,可能需要基于时间的数据保留策略(利用rollover机制实现),并从系统中删除旧数据。 使用索引别名:

  • 好处1:来简化从Elasticsearch中删除数据的过程。

  • 好处2:在没有任何停机时间的情况下从Elasticsearch中删除最旧的数据,不会出现任何查询中断,也不会进行任何客户端更改。

    基于时间索引的实现机制如下:

Elasticsearch基础但非常有用的功能之一:别名推荐阅读:

  • https://gitbook.cn/books/5c52c6923417565017a61ce0/index.html

试想一下:如果不是基于时间的索引,而使用大索引,删除历史数据会发生什么? 

答案:

  • 1、删除索引数据只能使用:deletebyquery,相比删除索引,deletebyquery删除数据只是逻辑删除;

  • 2、真正的删除实际是段合并后的物理删除分段,也就是deletebyquery后,有一段时间磁盘空间不降反升。此时的检索效率会非常低。

3.2 用户无感知的重建索引

实战中,索引的设计可能不是一步到位。 随着业务的扩展,可能会在开发的中后期,调整索引Mapping结构, 比如:

  • 1)iksmart改成ikmax_word分词以高效分词,

  • 2)long类型改成keyword以提升检索效率,

  • 3)修改索引分片数以便于机器横向扩展,

  • 4)索引分成更小粒度的索引等以提升性能。

通常的做法,都需要借助:reindex操作完成索引的迁移。 如果要确保线上环境的可靠运行且用户无感知(即无需告知用户,不影响用户的业务),使用别名指向更改前和更改后的索引是 绝佳方案。

实战举例:

  1. POST /_aliases?pretty

  2. {

  3. "actions": [

  4. {

  5. "remove": {

  6. "index": "visitor_logs_2018",

  7. "alias": "visitor_logs"

  8. }

  9. },

  10. {

  11. "add": {

  12. "index": "visitor_logs_2018_01",

  13. "alias": "visitor_logs"

  14. }

  15. }

  16. ]

  17. }

试想一下,如果没有索引别名呢?

 答案:

  • 1、无法保证查询的连续性;

  • 2、无法保证线上业务查询的可靠性(需要告知用户,业务中断一段时间)。

4、索引别名常见问题及坑解读

问题1:ES批量插入可以使用别名插入吗?

会报错: 

no write index is defined for alias[xxx].... 

注意:索引别名不是在任何地方都通用。写入或更新数据的时候需要指明物理索引,不要向别名写入数据。

问题2:ES怎么获取所有别名信息 alias?

或者问题:如何通过索引别名查找实际索引名称?

  1. GET _cat/aliases

返回信息:

  1. visitor_logs visitor_logs_2017 - - -

  2. .kibana .kibana_1 - - -

  3. visitor_logs visitor_logs_2018 - -

`

问题3:使用别名和基于索引效率一样吗?

是一致的。

前提:索引和别名指向相同的数据,相同的检索条件。

原理:索引别名只是物理索引的软链接名称而已。

问题4:如何使用别名提升检索效率?

  • 方式一:基于时间创建索引,指定多索引别名。 比如分为:近1年索引别名,近3个月索引别名,近1个月索引别名,近1周索引别名,近3天索引别名。 检索的时候,先 敲定时间范围,然后在指定范围的别名下检索。

    核心原理:物理上基于时间做了分隔,再加上冷热数据分离机制,会极大缩小了检索样本。

  • 方式二:使用filter 别名或者 路由别名机制,提升效率。 filter Alias上代码,实际业务中极易被忽视,但会极大提升效率。

  1. POST /_aliases

  2. {

  3. "actions" : [

  4. {

  5. "add" : {

  6. "index" : "test1",

  7. "alias" : "alias2",

  8. "filter" : { "term" : { "user" : "kimchy" } }

  9. }

  10. }

  11. ]

  12. }

路由机制参考官方文档即可。

5、字段别名实践一把

星友的问题: 

“Aliasdatatype,这个数据类型,在现实工作中的使用场景是什么?看官方文档,没有很好理解?”

字段别名原理第一部分已详细解释,不再赘述。 这里实践一把,加深理解。

  1. PUT trips

  2. {

  3. "mappings": {

  4. "_doc": {

  5. "properties": {

  6. "distance": {

  7. "type": "long"

  8. },

  9. "route_length_miles": {

  10. "type": "alias",

  11. "path": "distance"

  12. },

  13. "transit_mode": {

  14. "type": "keyword"

  15. }

  16. }

  17. }

  18. }

  19. }

注意: 当用户使用检索时,实际可以使用routelengthmile字段替代distance做检索,以达到distance一样的效果。

6、小结

  • 实战中,一般在开发 中后期才发现索引别名的妙处。正如文中分析:1、高效索引管理;2、用户无感知维护数据修改更新。

  • 建议:相同索引别名的物理索引有 一致的Mapping和数据结构,以提升检索效率。

  • 注意:发挥索引别名在检索方面的优势,在写入和更新还得使用 物理索引。

你的实际Elasticsearch业务场景,有哪些非常基础但实战开发非常有用的技术点呢? 欢迎留言留下你的思考,让我们一起精进!

参考:

https://cambium.consulting/articles/2018/2/22/our-favorite-elasticsearch-features-part-2-index-aliases


本文仅供学习!所有权归属原作者。侵删!文章来源: 铭毅天下Elasticsearch

更多文章:

  1. 记一次升级MySQL驱动包引发的事故
  2. 构建一个布隆过滤器 —— Building a Bloom filter
  3. 用图讲解SOLID设计原则
  4. Elasticsearch 使用误区之五——单次请求获取大量数据
  5. 系统设计入门:成为高级软件工程师的指南
  6. Elasticsearch 字段膨胀不要怕,Flattened 类型解千愁!
  7. 事件驱动架构(EDA) VS 请求响应架构(RR)
  8. 系统设计 | 搭建持续集成和部署流水线
  9. Elasticsearch 使用误区之一——将 Elasticsearch 视为关系数据库!
  10. 责任链模式在复杂数据处理场景中的实战
标签: 别名 搜索引擎 ElasticSearch ES
最后更新:2025-04-01

coder

分享干货文章,学习先进经验。

打赏 点赞
< 上一篇
下一篇 >
广告
文章目录
  • 0、题记
  • 1、别名分类
  • 2、索引别名实践
  • 3、索引别名的好处
  • 4、索引别名常见问题及坑解读
  • 5、字段别名实践一把
    • 6、小结
最新 热点 推荐
最新 热点 推荐
视频笔记-微服务架构P4:必懂5种设计模式 视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构 干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议 视频笔记:什么是微服务,为什么是微服务? 视频笔记:什么是AI 智能体?
基于 MySQL Binlog 实现可配置的异构数据同步马蜂窝消息总线——面向业务的消息服务设计视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构干货 | 论Elasticsearch数据建模的重要性视频笔记-微服务架构P4:必懂5种设计模式视频笔记:什么是微服务,为什么是微服务?视频笔记:Google发布Agent2Agent协议
Kafka为什么要去掉ZooKeeper?一文了解Kafka 中 ZooKeeper 的演变过程 事务异常:Transaction rolled back because it has been marked as rollback-only 《解构领域驱动设计》读书笔记 6.分层架构(译) 系统设计 | 多对多关系模型拆解案例 实现一个状态机引擎,教你看清DSL的本质 可插拔组件设计机制—SPI Spring Boot 与 Quarkus 对比解析:谁才是你的最佳Java框架?

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (3) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (20) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

COPYRIGHT © 2014-2025 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2

x