首页 > 其他分享 >Elasticsearch-Alias别名的2个核心场景

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

时间:2024-02-11 11:23:50浏览次数:32  
标签:index Alias 别名 alias 索引 Elasticsearch order

了解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

标签:index,Alias,别名,alias,索引,Elasticsearch,order
From: https://www.cnblogs.com/mangod/p/18013277

相关文章

  • Elasticsearch实现Mysql的Like效果
    在Mysql数据库中,模糊搜索通常使用LIKE关键字。然而,随着数据量的不断增加,Mysql在处理模糊搜索时可能面临性能瓶颈。因此,引入Elasticsearch作为搜索引擎,以提高搜索性能和用户体验成为一种合理的选择。1、客户的诉求在ES中,影响搜索结果的因素多种多样,包括分词器、Match搜索、Term搜......
  • nginx里alias,root,try_files笔记
    先说结果:try_files一共有三个值$uri,$uri//index.html,前两个值取决于alias,最后一个值和alias无关,取决于root,即如果最后一个值/index.html,则实际地址是root/index.html,不是alias/index.html,和alias一点关系没有,还有root,alias可以说不是一个东西,root中文意思根路径,限定......
  • [Elasticsearc] Elasticsearch 初见
    Elasticsearch初见启动双击bin目录下的elasticsearch.bat文件,等待终端运行成功索引的增删改查增(PUT)postman发送请求PUT请求:http://127.0.0.1:9200/shopping返回结果:{"acknowledged":true,"shards_acknowledged":true,"index":"shopping&......
  • [Elasticsearch] Elasticsearch 启动访问报错问题
    Elasticsearch启动访问报错问题产生的问题与解决方案环境:Windows10ES版本:8.12.0现象:双击elasticsearch.bat文件启动后,访问http://127.0.0.1:9200地址报了一个错误:receivedplaintexthttptrafficonanhttpschannel,closingconnectionNetty4HttpChannel.........
  • 别名的设置与使用
    在Linux中,你可以使用alias命令来设置别名。别名允许你为常用的命令创建自定义的缩写或快捷方式。这些别名会存在于当前会话中,如果你希望使别名永久生效,可以将其添加到你的shell配置文件中(例如.bashrc、.bash_profile、.zshrc等)。1、查看已有别名通过执行以下命令来查看L......
  • Python elasticsearch-py类库基础用法
    实践环境https://pypi.org/project/elasticsearch/pipinstallelasticsearch==7.6.0离线安装包及依赖包下载地址:https://files.pythonhosted.org/packages/f5/71/45d36a8df68f3ebb098d6861b2c017f3d094538c0fb98fa61d4dc43e69b9/urllib3-1.26.2-py2.py3-none-any.whl#sha256=d8ff9......
  • ElasticSearch使用(从入门到放弃)
    概述什么是ElasticSearch?也可简称为ES,顾名思义,可伸缩搜索,主要用来做检索的,再看看官网解释。Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎。作为ElasticStack的核心,Elasticsearch会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放......
  • 【ElasticSearch】脚本条件
    RESTAPI{"query":{"bool":{"must":[{"term":{"sqStatus":{"value":3,"boost":1}......
  • solr 添加别名步骤
    1、(因为配置节名字过长自动添加别名失败,需要修改配置节名称(collection)) 2、修改名称前需要做备份  3、添加collection 4、添加别名 确定后即可在solr中看到添加的别名了 ......
  • elasticsearch 查询:聚合查询
    新建索引:POST/index/_search{"aggs":"名字":{"agg_type":{"属性":"值"}}} 1.去重计数查询去重计数,即Cardinality先将返回的文档中的field进行去重,......