Elasticsearch的别名

别名的作用

在之前的文章中,介绍过Elasticsearch索引创建之后,假如尝试修改字段的类型的时候,除了重建索引之外没有别的办法。

假如我们尝试重建一个新的索引并把数据迁移过去,就会出现一个问题,当我们完成数据迁移的时候可能会需要重启我们的环境,将查询目标指向新的索引。假如这个业务已经运行在生产环境中,我们不得不进行一次停机升级。这个对于我们系统的运行来说显然不是很好的方法。

所以Elasticsearch提供了索引别名的功能。索引别名就像一个快捷方式或软连接,可以指向一个或多个索引,也可以给任何一个需要索引名的API来使用。使用索引别名我们可以在运行的集群中无缝的从一个索引切换到另外一个索引。

针对索引的API主要有两种,_alias 用于单个操作, _aliases用于执行多个原子级操作。这点会发现下面两种API都有使用的例子

查询别名

直接调用_aliasAPI的GET方法可以看到索引的别名,下面的例子中就是一个没有创建别名的索引。

查询指定索引的别名

GET localhost:9200/employee/_alias

查询所有索引的别名

GET localhost:9200/_alias
{"test_city_info3": {"aliases": {}},"employee": {"aliases": {}},"city_info": {"aliases": {}}
}

创建别名

这里使用的_aliases方法是一个支持多个别名操作的API。请求参数中接收的是个数组,其可以同时对多个索引添加或者删除别名操作。

  • JSON参数方式

请求地址

POST localhost:9200/_aliases

请求参数

{"actions": [{"add": {"index": "employee","alias": "employee_out"}}]
}
  • 第二种方式

这里使用的_alias方法一次只能操作一个索引。

PUT  localhost:9200/city_info/_alias/city_info_out

再次查询别名

{"test_city_info3": {"aliases": {}},"employee": {"aliases": {"employee_out": {}}},"city_info": {"aliases": {"city_info_out": {}}}
}

删除别名

删除别名使用的依旧是_aliasesAPI,需要将add参数修改为remove

请求及参数

POST localhost:9200/_aliases
{"actions": [{"remove": {"index": "employee","alias": "employee_out"}}]
}
DELETE localhost:9200/_aliases

再次查询所有索引的别名

{"test_city_info3": {"aliases": {}},"employee": {"aliases": {}},"city_info": {"aliases": {}}
}

修改别名

其实就是移除之前的别名,然后关联新的别名关系。这一步操作我们可以实现运行中的es集群无缝切换索引。我们可以将索引指向一个新准备的别名中,也可以为别名关联新的索引。

{"actions": [{"remove": {"index": "employee","alias": "employee_out"}},{"add": {"index": "employee","alias": "employee_out2"}}]
}

另外可以看到索引和别名并非是一对一的关系,一个索引可以对应多个别名,同样一个别名可以对应多个索引。所以就可能出现下面的数据情况

多个索引使用一个别名

{"actions": [{"add": {"index": "employee","alias": "employee_out2"}},{"add": {"index": "city_info","alias": "employee_out2"}},{"add": {"index": "test_city_info","alias": "employee_out2"}}]
}

一个索引使用多个别名

{"actions": [{"add": {"index": "employee","alias": "employee_out2"}},{"add": {"index": "employee","alias": "employee_out3"}},{"add": {"index": "employee","alias": "employee_out4"}}]
}

通过别名查询索引

一旦一个索引创建了别名,我们就可以通过这个别名获取索引的配置信息。当一个别名对应了多个索引的时候,系统会返回其关联的多个索引的信息。

请求及参数

GET localhost:9200/employee_out3

响应内容

{"employee": {"aliases": {"employee_out2": {},"employee_out3": {},"employee_out4": {}},"mappings": {"properties": {"age": {"type": "integer"},"entry_time": {"type": "date"},"group": {"type": "keyword"},"name": {"type": "keyword"}}},"settings": {"index": {"creation_date": "1571801862644","number_of_shards": "1","number_of_replicas": "1","uuid": "FZwM2b8WQQiSnaxMqgbckQ","version": {"created": "7020099"},"provided_name": "employee"}}}
}

通过别名查询数据

通过别名进行数据查询的时候可以尝试查询出多个索引的数据。现在有个employee_out2它关联了两个完全不同结构的索引,一个之前测试数据的employee索引,一个是之前测试的城市信息索引city_info,现在尝试对这两个完全不一样结构的索引进行查询

请求地址

POST localhost:9200/employee_out2/_search{"query": {"terms": {"name": ["甲0","上海"]}}
}

返回结果

最后可以看到其拿到了完全不同的数据内容。


{...."hits": {"total": {"value": 5,"relation": "eq"},"max_score": 1,"hits": [{"_index": "city_info","_type": "_doc","_id": "1","_score": 1,"_source": {"name": "上海","desc": "中国经济、金融、贸易、航运、科技创新中心","province": "上海","gdp": "3267900000000","area": "华东地区","carNumPrefix": "沪"}},{"_index": "city_info","_type": "_doc","_id": "7","_score": 1,"_source": {"name": "苏州","desc": "大城市","province": "江苏","gdp": "1859700000000","area": "华东地区","carNumPrefix": "苏E"}},....]}
}

通过别名写数据

当一个别名关联多个索引的时候,此时需要为索引设置参数is_write_index,被设置为true的索引,当对别名写数据的时候数据会被写到此索引中。

POST localhost:9200/_aliases{"actions": [{"add": {"index": "employee","alias": "employee_out2","is_write_index": true}}]
}

然后数据插入完成

PUT localhost:9200/employee_out2/_doc/200{"_index": "employee","_type": "_doc","_id": "200","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 100,"_primary_term": 1
}

使用别名重建索引的过程

当我们决定存储某种数据时,在创建索引的时候需要将数据结构完整确定下来,于此同时索引的设定和很多固定配置将不能改变。
当需要改变数据结构时,就需要重新建立索引,为此,Elastic团队提供了很多辅助⼯工具帮助开发人员进行重建索引。

重建索引过程

  1. 为当前索引建立一个别名
  2. 将需要调整后的映射建立一个索引
  3. 将旧索引的数据同步到新索引中
  4. 将新索引和当前索引别名关联
  5. 删除旧索引,完成数据转移

创建索引以及映射

PUT  localhost:9200/user{"properties": {"name": {"type": "keyword"},"age": {"type": "integer"},"role": {"type": "integer"}}
}

创建别名

POST localhost:9200/_aliases
{"actions": [{"add": {"index": "user","alias": "user_out","is_write_index": true}}]
}

插入一些数据

新的索引映射

PUT  localhost:9200/user_v2{"properties": {"name": {"type": "keyword"},"age": {"type": "integer"},"role": {"type": "keyword"}}
}

拷贝数据

POST localhost:9200/_reindex{"source": {"index": "user"},"dest": {"index": "user_v2"}
}

进行别名替换

POST localhost:9200/_aliases
{"actions": [{"add": {"index": "user_v2","alias": "user_out"}},{"remove": {"index": "user","alias": "user_out"}}]
}

当一个别名关联多个索引的时候,进行查询

{"error": {"root_cause": [{"type": "illegal_argument_exception","reason": "Alias [employee_out2] has more than one indices associated with it [[employee, test_city_info, city_info]], can't execute a single index op"}],"type": "illegal_argument_exception","reason": "Alias [employee_out2] has more than one indices associated with it [[employee, test_city_info, city_info]], can't execute a single index op"},"status": 400
}

删除索引(错误内容)

POST localhost:9200/user

访问数据

GET localhost:9200/user_out/_doc/1

个人水平有限,上面的内容可能存在没有描述清楚或者错误的地方,假如开发同学发现了,请及时告知,我会第一时间修改相关内容。假如我的这篇内容对你有任何帮助的话,麻烦给我点一个赞。你的点赞就是我前进的动力。

Elasticsearch基础11——索引之别名使用相关推荐

  1. elasticsearch基础1——索引、文档

    用于复习快速回顾. 目录 1.初识弹性搜索elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK弹性栈 1.1.3.elasticsearch和 ...

  2. ElasticSearch 基础(四)之 常用 API 测试

    目录 前言 一.查看(Cat) API 1.查看节点信息 2.查看各节点机器存储信息 3.查询索引信息 4.查询分片信息 5.查询集群健康状态 6.查询集群所有的别名索引 7.查询主节点信息 8.查询 ...

  3. ElasticSearch基础杂烩-配置-索引-优化

    2019独角兽企业重金招聘Python工程师标准>>> ElasticSearch基础杂烩-配置-索引-优化 博客分类: java 前言 ElasticSearch是一个基于Luce ...

  4. ElasticSearch核心基础之索引管理

    一 索引管理 1.1 创建索引 # 建立索引的时候,我们可以设置主分片和备份分片的数量通过setting字段number_of_shards和number_of_replicas字段设置 # 对于ES ...

  5. ElasticSearch的REST APIs 之 索引的别名(alias)管理

    基于 ES 7.7, 官方文档 注意: 7.15版本中调整了分类, 把7.7版本中的Add和Update合并为"Create or Update", 更符合es api的定义 主要 ...

  6. Elasticsearch基础整理 脑图

    Elasticsearch知识整理,基于ES6.7.1 主要涉及ES集群各模块功能及使用说明,集群选举流程 读取/写入流程等等,不涉及dsl等具体操作,后面会持续更新! 需要完整文件 到我 公众号 ' ...

  7. elasticsearch的多索引联合查询以及范围日期查询示例

    一.前言 首先,博主这边要用ES来代替传统的mysql操作,那么原来的多表联合查询操作自然也要转换为多索引联合查找.这里使用elasticsearch-php库来操作ES,原生的ES也是大同小异的. ...

  8. Elasticsearch基础教程ES

    Elasticsearch基础教程     翻译:潘飞(tinylambda@gmail.com) 基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助 ...

  9. ElasticSearch基础教程

    1.初识ElasticSearch 1.1数据库查询存在的问题: 性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低 功能弱:如果以"华为手机"作为条件,查询有华为 ...

最新文章

  1. github 创建密匙失败
  2. MySQL数据库管理(二)单机环境下MySQL Cluster的安装
  3. 为什么物联网没有杀手级应用
  4. 实验报告一:词法分析
  5. MATLAB生成FPGA COE文件之XILINX FPGA滤波器系数
  6. SLF4J with Logback in a Maven Project | Mograblog
  7. 用matlab找出所有真因子,在matlab中找出与fmincon匹配两条曲线的缩放因子
  8. 虚拟化桌面初始化配置处理
  9. 递归算法的总结与应用
  10. dumpe2fs命令详解
  11. 基于Java Bean Validation对Request参数进行校验的设计思路
  12. java import的作用_Java技术_Java千百问(0030)_package和import作用是什么
  13. matlab面源模式反扩散参数研究,基于GIS的大气点源污染高斯烟羽扩散模拟研究
  14. RAID磁盘阵列与阵列卡
  15. 图像处理保研面试_北航信息与通信工程方向保研面试题集
  16. 欠款人署名故意签错,怎么维权
  17. 先电iaas云平台搭建(openstack)————搭建过程
  18. 用8266学习单片机-9-红外报警器-基于光敏电阻的模拟信号读取
  19. lisp 梯形展开图_斜截圆柱件钣金展开图的AutoCAD二次开发
  20. lsdyna如何设置set中的node_list_如何理解vue的双向绑定

热门文章

  1. 深入JavaWeb技术世界15:通过项目逐步深入了解Mybatis(二)
  2. macbook pro开机后自动关机
  3. android英文参考文献,英文参考文献
  4. 网页播放器自定义倍速播放
  5. 华为Datacom认证介绍
  6. Excel报:文件已损坏无法打开错误问题解决
  7. Django 使用不同配置文件的三种方式
  8. 为什么要使用API Key 和Secret Key
  9. 在Android手机或平板电脑上启用开发者模式选项
  10. 最详细的MySQL大表优化方案