Elasticsearch-Alias别名的2个核心场景

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 了解Elasticsearch的Alias别名之后,可以在业务上很方便的实现复杂需求,快速解决问题,本文从3个方面介绍:官方定义、使用场景、使用方法。

了解Elasticsearch的Alias别名之后,可以在业务上很方便的实现复杂需求,快速解决问题,本文从3个方面介绍:官方定义、使用场景、使用方法。

一、官方定义

先看下官方对ES 的Alias定义:

重点有2个:

  • 别名是一组索引的辅助名称,一个别名可以指向多个索引,一个索引可以有多个别名。
  • 使用别名后,在重建索引数据时,无需停机或更改程序代码。

别名有种类似Nginx反向代理的感觉,当访问别名时,相当于访问的实际索引的代理

二、使用场景

1、一组索引使用同一个别名

比如:存储大量日志数据的场景,或者 存储几亿订单数据的场景。

由于ES索引的单个分片建议大小为30G左右,同时ES的分片数量也不要太大,建议1~5之间。所以,势必要建立多个索引去存储大量数据。比如 按日、按月、按季度、按年 存储等。

此时如果要从这些索引里去查询数据,在不使用Alias的情况下,肯定要在业务代码里写上一堆复杂的逻辑,然后是兼容各种场景和异常,即使感觉做的比较完善了,可能上线后还有未知的问题。

使用Alias后,业务代码无需改动,只需要给相关索引建立同样的别名,然后利用Alias查询,ES会自动将相关的索引数据都查出来。

order_202301(索引名称) => order_alias(别名)

order_202302(索引名称) => order_alias(别名)

order_202303(索引名称) => order_alias(别名)

......

2、一组索引里的部分索引使用同一个别名

比如:数据太大,只需要查询近半年的数据,则使用别名指向近半年的索引即可,业务层依然无需修改代码。滚动更新别名指向的索引。

3、无缝的切换一个索引到另一个索引

比如:正在使用的索引A存在部分异常数据,此时可以重新构建索引B,然后将Alias指向索引B,这样可以无缝切换索引,并且业务层无感知。

4、查询一个索引里面的部分数据构成视图

针对某个索引,有些场景需要固化视图时,就可以设置别名来实现,这样调用方使用起来很方便,无需加入重复的查询条件。比如有个 订单索引,多处需要查询 30天内已支付订单,此时可以利用Alias构建出这样的视图。

5、重建索引

在ES中无法对索引的现有字段做改动,一般的做法是创建新的索引,然后把文档从旧的索引复制到新的索引里。针对这种情况,别名的使用优势就体现出来了,索引别名可以实现旧索引到新索引的平滑迁移。

三、使用方法

1、创建别名

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "order_202301",
        "alias": "order_alias"
      }
    },
    {
      "add": {
        "index": "order_202302",
        "alias": "order_alias"
      }
    }
  ]
}

2、移除别名

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "order_202301",
        "alias": "order_alias"
      }
    }
  ]
}

3、切换别名

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "order_202301",
        "alias": "order_alias"
      }
    },
    {
      "add": {
        "index": "order_202303",
        "alias": "order_alias"
      }
    }
  ]
}

4、部分数据构建视图

POST /_aliases
{
  "actions" : [
    {
      "add" : {
         "index" : "order_202303",
         "alias" : "order_alias",
         "filter": {"term" : {"pay_state": 1}}
      }
    }
  ]
}

5、重建索引

  • 不使用Alias的方案

在不使用Alias重建索引时,一般是如下5步:

# 1、将index_A拷贝到备份index_A_bak
POST _reindex                    
{
  "source": {
    "index": "index_A"
  },
  "dest": {
    "index": "index_A_bak"
  }
}

# 2、删除index_A
DELETE index_A

# 3、创建新的 index_A,此处省去创建新的index_A的过程

# 4、将备份index_A_bak拷贝到新的index_A
POST _reindex                    
{
  "source": {
    "index": "index_A_bak"
  },
  "dest": {
    "index": "新的index_A"
  }
}

# 5、删除备份index_A_bak
DELETE index_A_bak

以上的方案无法实现无缝切换,因为在删除旧的index-A之后,新的index-A还没创建,而且数据还没拷贝完毕。

基于这种方案要想无缝切换,那只能是先创建index-B,通过reindex将index-A的数据拷贝到index-B,然后业务代码改成访问index-B。

  • 使用Alias的方案

使用Alias的方案就很轻松了,无需改动代码即可实现无缝切换。后续切换索引只需要操作3、4、5步即可。

# 1、给index_A添加别名
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "index_A",
        "alias": "index_alias"
      }
    }
  ]
}

# 2、业务层的代码改成使用别名操作索引

# 3、将index_A数据拷贝到index_B
POST _reindex                    
{
  "source": {
    "index": "index_A"
  },
  "dest": {
    "index": "index_B"
  }
}

# 4、别名切换
POST /_aliases
{
    "actions": [
        {
            "add": {
                "index": "index_A",
                "alias": "index_alias"
            },
            "remove": {
                "index": "index_B",
                "alias": "index_alias"
            }
        }
    ]
}

# 5、删除索引index_A
DELETE index_A

四、总结

本文主要讲了Elasticsearch别名的使用场景,主要就2点:

  • 使用别名代替一组索引,让业务开发变得更简单。
  • 重建索引数据时,无需停机或更改程序代码。

本篇完结!感谢你的阅读,欢迎点赞 关注 收藏 私信!!!

原文链接:https://mp.weixin.qq.com/s/U6YAN_yW809NvF1JDntBHw

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
12月前
|
存储 缓存 达摩院
企查查基于阿里云Elasticsearch 在复杂检索场景中的性能优化
本文分享企查查基于阿里云Elasticsearch 在复杂检索场景中的性能优化。
1063 0
|
7月前
|
存储 自然语言处理 监控
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
|
设计模式
【设计模式】【第六章】【查询ElasticSearch 大量数据场景】【迭代器模式】
• 创建design-demo项目 • 创建EsController • 创建EsService • 创建EsServiceimpl • 创建EsQueryProcessor • 创建EsSqlQuery • 创建EsSqlResult
|
存储 缓存 编解码
阿里云Elasticsearch日志场景 最佳实践及引擎内核优化
分享人:郭嘉梁(梁楹),阿里巴巴技术专家
1280 0
阿里云Elasticsearch日志场景 最佳实践及引擎内核优化
|
存储 缓存 运维
阿里云Elasticsearch日志场景最佳实践及引擎内核优化
本文整理自阿里巴巴技术专家郭嘉梁(梁楹)在 阿里云Elasticsearch 自研引擎年度发布 的演讲。
1217 0
阿里云Elasticsearch日志场景最佳实践及引擎内核优化
|
存储 弹性计算 运维
年度回顾:阿里云Elasticsearch 在泛日志场景的核心能力建设
本文整理自阿里巴巴资深技术专家邓万禧在 阿里云Elasticsearch 自研引擎年度发布 的演讲。主要内容包括:1、年度回顾;2、泛日志场景机会与挑战;3、Elasticsearch 日志 Serverless 服务1.0
940 0
年度回顾:阿里云Elasticsearch 在泛日志场景的核心能力建设
|
存储 SQL 运维
Tablestore 与 Elasticsearch 在数据库查询加速场景使用对比
过去三十年,我们从企业应用开始,经历了 PC 互联网、移动互联网的爆发式发展,到如今的产业互联网。在这些不同时代,一直变化的是应用形态,不变的是核心数据的价值。对于核心数据的存储,首选的方案是使用数据库存储,从互联网初期开始,开源关系型数据库 MySQL 成长成为了数据库存储的第一选择,关系型数据库解决了数据的快速建模,高可靠存储和快速查询,但是关系数据库中的高效查询主要依赖二级索引,如果出现索引
1602 2
Tablestore 与 Elasticsearch 在数据库查询加速场景使用对比
|
消息中间件 存储 监控
Elasticsearch生态&技术峰会 | Elasticsearch在乐言的多场景应用实践
开源最大的特征就是开放性,云生态则让开源技术更具开放性与创造性,Elastic 与阿里云的合作正是开源与云生态共生共荣的典范。值此合作三周年之际,我们邀请业界资深人士相聚云端,共话云上Elasticsearch生态与技术的未来。
995 0
Elasticsearch生态&技术峰会 | Elasticsearch在乐言的多场景应用实践
|
存储 缓存 运维
Elasticsearch, 你值得拥有!—— 云栖大会 Elasticsearch 场景化应用全景回顾
云栖大会大咖云集,作为Elastic爱好者,参加大会就是想看平时看不到、学不到的内容。
7314 0
Elasticsearch, 你值得拥有!—— 云栖大会 Elasticsearch 场景化应用全景回顾
|
搜索推荐 计算机视觉 数据库
独家下载 | 《Elasticsearch 八大经典应用》独享大咖场景化应用的秘密
本书是搜索&推荐技术应用系列的第一本。阅读本书,您将清晰了解到:Elasticsearch 对比主流数据产品,到底有哪些优劣势?人脸识别、地理位置分析等典型场景,如何轻松完成?PB级大数据下,如何保障毫秒级的检索与秒级分析...
51920 0
独家下载 | 《Elasticsearch 八大经典应用》独享大咖场景化应用的秘密

热门文章

最新文章