索引别名

索引别名的使用

好了,到目前看起来都很完美,除了有一点点问题,就是如果每次修改索引都要改配置或程序里面的索引名,甚至意味着需要重新部署。那还有没有办法变的更完美一点点呢?

在 Elasticsearch 里面有个 alias 别名的功能,可以动态的修改别名指向的实际索引,这个功能刚好可以实现我们索引的动态修改,具体的使用方法如下:

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "forum-mysql-v1", "alias" : "forum-mysql" } }
    ]
}

这里参数里面的 add,表示添加一个别名的操作,里面有两个参数,index 表示对具体的那个索引进行别名的操作,alias 也就是添加一个什么样的别名。

与 add 对应的还有一个删除别名的操作,用于删除索引的别名,假如有一天,我们重新修改了索引,我们需要将别名切换到一个新的索引里面去(如 forum-mysql-v2),则可以进行如下的操作:

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "forum-mysql-v2", "alias" : "forum-mysql" } },
         { "remove" : { "index" : "forum-mysql-v1", "alias" : "forum-mysql" } }
    ]
}

通过别名,我们实现了虚拟的索引名,我们然后进一步修改我们的查询也指向我们的别名,而不是实际的索引,如下:

现在,打开浏览器执行一下测试,智能提示应该能够很好的一切照旧。

小知识

  • 一个别名可以对应多个实际的索引
  • 一个索引可以指定多个不同的别名
  • 如果一个别名指定多索引,则不能进行索引数据的修改,单一对应关系则不影响
  • 创建索引别名的时候,可以指定过滤条件来进行数据的过滤,相当于创建 视图