1.es可以对一个或者多个索引指定别名,通过别名可以查到一个或者多个索引的内容。在内部,es会把别名映射到相应的索引上。可以对别名编写过滤器或者路由,在系统中别名不能重复,也不能和索引名重复。es中的别名机制有点像数据库中的视图。
例子:为test1增加一个别名alias1
请求:POST http://127.0.0.1:9200/_aliases
参数:{"actions":[{"add":{"index":"secisland","alias":"alias1"}}] }
删除别名,请求与上述一样,参数不同
{
"actions":[{"remove":{"index":"test1","alias":"alias1"}}]
}
注意:别名没有修改语法,修改别名时,可以先删除别名,再添加
{
"actions":[
{"remove":{"index","test1","alias":"alias1"}},
{"add":{"index":"test1","alias":"alias2"}}
]
}
一个别名也可以关联多个索引
{
"actions":[
{"add":{"index":"test1","alias":"alias1"}},
{"add":{"index":"test2","alias":"alias1"}}
]
}
也可以用以下语法
{ "actions":[ {"add":{"indices":["test1","test2"],"alias":"alias1"}} ] }
或者使用通配符
{
"actions":[
{"add":{"index":"test*","alias":"all_test_indecies"}}
]
}
注意:通配符指定的索引只在当前索引生效,后续添加索引不会被自动添加到别名上。对某一别名做索引的时候,如果该别名添加多个索引就会报错
2.过滤索引别名
通过过滤索引来指定别名提供了对索引查看的不同视图,
该过滤去可以使用查询DSL来定义适用于所有的搜索,计数,查询删除等,以及更多类似这样的与此别名的操作。
创建一个带过滤的别名,首先确保映射中已存在需要过滤的字段:
请求:PUT http://127.0.0.1:9200/test1
参数
{
"mappings":{
"type1":{
"properties":{
"user':{"type":"string","index","not_analuzed"}
}
}
}
}
创建过滤别名,请求:POST http://127.0.0.1:9200/_aliases
参数:
{
"actions":[
{"add":{"index":"test1","alias":"alias1","filter":{
"term":{"user":"kimchy"}}}}
}
]
}
通过别名也可以和路由关联,此功能可以和过滤别名命令一起使用
请求:POST http://127.0.0.1:9200/_aliases
参数:
{
"actions":[
{"add":{"index":"test1","alias":"alias1","routing":"1"}}
]
}
详细路由知识参考:https://blog.csdn.net/u010454030/article/details/73554652/
同时可以指定搜索路由和查询路由
参数:
{
"actions":[
{"add":{"index":"test","alias":"alias2","search_routing":"1,2","index_routing":"2"}}
]
}
注意:搜索路由可以指定多个值,索引路由只能指定一个值.如果使用路由别名操作的同时还有路由参数,则结果时别名路由和路由的交集
GET http://127.0.0.1:9200/alias2/_search?q=user:kimchy&routing=2,3
通过参数添加别名
请求:PUT /{index}/_alias/{name}
参数:{"routing":"1","filter"}
请求:PUT http://127.0.0.1:9200/secisland
{
"mappings":{
"secilog":{
"properties":{"user_id":{"type":"integer"}}
}
}
}
指定别名:
请求:PUT http://127.0.0.1:9200/secisland_alias/user_12
{
"routing":"12",
"filter":{
"term":{"user_id",12}
}
}
建立索引的同时指定别名
请求:PUT http://127.0.0.1:9200/seciland
{
"mappings":{
"type":{
"properties":{"year":{"type":"integer"}}
}
},
"aliases":{
"current_day":{},
"2014":{
"filter":{"term":{"year":2014}}
}
}
}
3.删除别名
DELETE http://{host}:{port}/{index}/_alias/{name}
4.查询现有的别名
可以通过索引名或者别名进行查询
index:索引的名称。部分支持通配符,用逗号分隔也可以指定多个索引名称,还可以使用索引的别名名称
alias:在响应中返回的别名名称
ignore_unavailable:如果一个指定的索引名称不存在该怎么办。如果设置为true,那么这些索引将被忽略
语法:GET http://{host}:{port}/{index}/_alias/{alias}
用HEAD也可以检查别名是否存在,语法和GET类似
HEAD http://127.0.0.1:9200/_alias/2013*