保护私人版权,尊重他人版权。转载请注明出处并附带页面链接
本文主要讲述在ElasticSearch(后面简称为ES)中使用别名的应用。
ElasticSearch别名
ES中的索引别名就像一个快捷方式或软连接,可以指向一个或多个索引
使用背景
生产环境中出于索引设计有缺陷或业务上的变更等原因,有可能需要对索引有修改。在mysql中可以直接修改列的属性,但是在ES中无法对现有的字段做改动,最简单的方法是增加新的索引再用新的设置创建新的索引并把文档从旧的索引复制到新的索引。针对这种情况,别名的使用优势就体现出来了,正如软连接的使用优势一样,索引别名可以实现旧索引到新索引的平滑迁移
实际使用举例
业务上订单可以模糊搜索用户手机号,后来改成了只能精确搜索。之前的设计上手机号作为非结构化数据,type设置的text,现想更改成结构化的type为keyword的索引数据。下面是使用别名与否的处理对比。
不用别名:
- 已有索引phone_no,新建索引exact_phone_no
- 初始化exact_phone_no索引数据
- 代码上更改处理的字段名把原来的phone_no对应改成exact_phone_no
- 以后要修改索引还得在代码层面修改
使用别名:
- 新建别名
- 代码中使用别名而不是索引名
- 以后要修改索引在代码层面无需修改
参考文档:https://www.elastic.co/guide/en/elasticsearch/guide/current/index-aliases.html