在大数据开发过程中,经常会用到Elasticsearch,在Elasticsearch,给index(索引)起一个aliases(别名)是一个很重要的知识点,这个知识点虽然很基础,却能够解决两个索引之间无缝切换,在一些场景下发挥着很大的作用。 例如,当遇到线上索引a出了问题,比如:某个索引某字段分词定义不准确,需要变更字段类型,毕竟刚开始设计没有考虑那么完善,因为业务变更需要调整字段类型,我们需要把索引a切换到另一个索引b,这时候索引的别名的就派上用场了。 索引别名,简单来说就是它指向一个或多个索引。
那么如何实现两个索引无缝切换呢? 举个例子: 假如索引a和索引b这两个索引共同拥有别名c,而客户端查询的索引名是c,当索引b数据重建完成后,我们只需要解除旧索引a与别名c关系,然后添加新索引b与别名c的关系,就能完成无缝切换,这过程操作对对用户来说是是无感知的,体验非常好。 如果索引b数据有问题,我们随时都可以重新解除索引b的关系并恢复索引a。 可以这么理解, Elasticsearch中的index(索引) aliases(别名)就像是软连接,它可以映射一个或多个索引,提供了非常灵活的特性。 下面我们来实例操作下: 假设我们有两个索引分别是item_v1和item_v2,现在想通过索引别名来实现这两个索引无缝切换,他们对外的索引别名叫item_index。 首先我们先创建第一个item_v1并给你添加aliases
索引创建完成后,我们可以用命令来查询一下它们的关系:
返回结果如下:
现在我们来构建另一个索引 item_v2:
新索引item_v2构建成功后,我们可以通过命令来实现它和旧索引item_v1直接的切换。
上面的操作是顺序的执行的,先移除旧索引item_v1的别名,然后给item_v2 添加新的别名,这样就可以让这个两个索引无缝的切换了。 对于用户来说,体验是无感知的。 需要注意的是,使用索引别名后,type类型的值就不需要再在填写,因为它认为你这别名是一个新的索引,所以我们只写index name即可,Elasticsearch服务端知道它的类型。 总结 索引别名是Elasticsearch一个非常基础的知识点但在实际开发是一个非常有用的技术点。掌握它可以帮助我们设计更易于维护的数据索引,关于es别名,合理利用,不仅可以提升工作效率,还方便后期索引维护,确实是一个很重要的知识点。 由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。 |
|