将一个别名关联多个索引
为test1添加别名alias1,test2添加别名alias2,代码块中的两种方式等效。为索引绑定多个别名的语法与之类似,只需将alias替换aliases数组。
POST /_aliases { "actions" : [ { "add" : { "index" : "test1", "alias" : "alias1" } }, { "add" : { "index" : "test2", "alias" : "alias1" } } ] } # 等效于上面的方式 POST /_aliases { "actions" : [ { "add" : { "indices" : ["test1", "test2"], "alias" : "alias1" } } ] }
除了以上两种方式外,我们还可以使用glob模式,将别名与多个索引相关联绑定,这种方式只会对集群中已存在的索引生效,不会对之后创建的索引生效。
POST /_aliases { "actions" : [ { "add" : { "index" : "test*", "alias" : "all_test_indices" } } ] }
如果错误的创建了一个索引,同样可以通过别名的方式来解决。
例如:错误的创建了一个名称为test的索引,而实际需要的索引名称为test_2,但是已经有数据往索引里面写入数据了;为了解决这个问题,首先创建正确的索引名称,然后用一个原子操作,将test别名绑定test_2,同时删除索引test。
集群状态中不会发生别名绑定不到索引的情况;但由于索引和搜索涉及多个步骤,正在运行或排队的请求,可能会由于临时不存在索引而失败。
# 创建索引test PUT test # 创建索引test_2 PUT test_2 POST /_aliases { "actions" : [ { "add": { "index": "test_2", "alias": "test" } }, { "remove_index": { "index": "test" } } ] }
新建索引时绑定别名
上述给索引绑定别名,均需要提前创建索引;若需要别名能给对新索引生效,可以在创建索引时进行指定。
PUT test1 { "aliases" : { "alias1" : { }, "alias2" : { } }, "mappings" : { }, "settings" : {} }
除此之外,还可以在索引模板里面进行指定。
如下代码块创建了一个模版名称为test,order权重为0索引模板,之后只要是以test开头的索引都会绑定别名alias1和alias2。
PUT _template/test { "order" : 0, "index_patterns" : [ "test*" ], "aliases" : { "alias1" : { }, "alias2" : { } }, "mappings" : { }, "settings" : {} }
别名查看
Get index alias
别名的查看方式有如下几种方式:
GET /_alias GET /_alias/<alias> GET /<index>/_alias/<alias>?allow_no_indices=true&expand_wildcards=all&local=false&ignore_unavailable=false
路径参数
可选参数,参数类型为string;参数支持单个索引或者以逗号分隔的多个索引再或者通配符表达式形式。
可选参数,参数类型为string;参数支持单个别名或者以逗号分隔的多个别名再或者通配符表达式形式。
查询参数
allow_no_indices
可选参数,参数类型为Boolean,默认值为true;如果设置为false,任何通配符表达式、索引别名或_all值只针对丢失或关闭的索引,则请求将返回一个错误。即使请求以其他开放索引为目标,此行为也适用。
expand_wildcards
可选参数,参数类型为string,该参数主要用于控制哪些特性的索引的别名可以被查看,参数可取如下几种类型的值:
l all
l 匹配所有数据流或索引,包括隐藏的数据流或索引。默认值为 all。
l open
l 匹配索引状态为open,非hidden的索引,以及非hidden的数据流。
l closed
l 匹配索引状态为closed,非hidden的索引,以及非hidden的数据流(数据流不能够被关闭)。
l hidden
l 匹配隐藏的数据流和索引,且索引必须是打开或者关闭状态。
l none
l 不接受通配符表达式,即参数中不能包含通配符表达式。
ignore_unavailable
可选参数,参数类型Boolean,默认值为false。如果请求路径中有索引不存在,则请求将会发生错误。
local
可选参数,参数类型Boolean,默认值为false。如果设置为true,则仅仅从本地节点获取集群元信息(包括索引别名信息);如果设置为true,则从master节点获取,master的信息最权威,可以避免因为网络等问题,造成的元信息下发不及时,造成的获取元信息有误,但也会增加网络开销。
_cat API
除了通过Get index alias API进行查看索引别名,还可以_cat API进行索引别名查看。
GET _cat/aliases GET _cat/aliases/<alias>
别名删除
Delete index alias
RESTful API 语法如下:
DELETE /<index>/_alias/<alias>?master_timeout=<time>&timeout=<time> DELETE /<index>/_aliases/<alias>?master_timeout=<time>&timeout=<time>
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.11.Index alias(4) https://developer.aliyun.com/article/1230375