1 创建别名¶
创建别名有很多种方法,可以创建索引同时创建别名,也可以在创建索引后创建,既可以让别名指向多个索引,也可以让别名指向一个索引的部分数据,甚至指向一个字段。我们来一一例举这是如何操作的。
(1)创建索引同时创建别名
创建一个名为users用户索引,索引中记录了用户出生年,现在,我们在创建索引的同时,创建两个别名,一个别名指向整个users索引,并通过filter进行过滤,使别名只指向2000年出生的用户。
(2)创建索引后创建别名
直接通过API路由传递别名来创建,这种方法有一下几种请求方式,注意,这种方式要求索引必须存在。
PUT /<index>/_alias/<alias>
POST /<index>/_alias/<alias>
PUT /<index>/_aliases/<alias>
POST /<index>/_aliases/<alias>
可以通过请求体来对别名进行设置,例如创建一个名为2020的别名,指向users索引中birth-year字段值为2020的文档。
(3)创建字段别名
索引可以拥有别名,字段也可以,在创建索引时,我们可以为字段设置一个别名。例如,为username字段设置一个别名name。
2 修改+删除别名¶
之所在现在要将修改别名和删除出别名放在一起来说,是因为下面的这个API功能太多,既能够添加别名,也能修改别名,还能删除别名。通过例子来说明,例如,为users索引添加一个名为alias1的笔名,可以这么操作:
这个API形式上很好理解,就是想aliases
路由发送一个POST请求,别名的信息都是在请求体中进行配置,actions
表示需要进行的操作,里面每一个子项都表示一个动作,这个动作可以为add
表示添加别名的操作,remove
表示删除别名的操作。index
表示针对哪一个索引上创建别名,alias
后面跟着的就是新建或者需要删除的别名的名称。下面通过一些例子说明如何使用这一API。
(1)为同一索引创建多个别名
(2)删除一个别名
(3)重命名一个别名
ES中别为提供直接进行重命名操作的关键字,而是先执行remove,然后执行add,这一操作是原子操作,所以无需担心别名删除未创建的短暂中空期,这相当于为为原来别名创建了一个新的引用,删除旧的应用,实际还是同一个别名,例如将名为alias1的别名重命名为alias2,可以这么操作:
(4)创建一个别名指向多个索引
例如创建一个名为myusers的别名同时指向索引users1和users2:
也可以通过通配符来实现这一操作:
(5)创建有过滤条件的别名
(6)创建可写入别名
如果一个别名单独指向一个索引,那么使用别名进行写入操作是不会有问题的,但是,一个别名指向多个索引索引时,是不能进行写入操作,因为ES不知道将文档写入到哪一个索引。这一问题可以在创建别名时将某一个索引设置为可写来解决,注意,只能设置一个。
3 查看别名信息¶
(1)查看别名是否存在
使用HEAD请求方式+别名可以查看别名是否存在:
HEAD /_alias/<alias>
HEAD /<index>/_alias/<alias>
可使用HEAD方式查看是否存在,如果查看整个集群是否存在某个别名,可以这样操作:
如果存在,则返回200状态码,如果不存在,返回404状态码:
如果是查看某个索引是否有某个别名,可以这么操作:
(2)查看别名信息
查看别名信息API如下所示:
GET /_cat/aliases/<alias>
GET /_cat/aliases
前者查看指定别名,后者查看集群中所有别名。