基于 ES 7.7, 官方文档
注意: 7.15版本中调整了分类, 把7.7版本中的Add和Update合并为"Create or Update", 更符合es api的定义
主要内容:
- Add index alias: 创建或更新别名
- Delete index alias: 删除索引别名
- Get index alias: 获取索引别名
- Index alias exists: 检查索引别名是否存在
- Update index alias: 添加/删除索引别名
1. Add index alias: 创建或更新索引别名
索引别名, 是一个或多个索引的辅助名称。
大多数 ES api 都接受使用索引别名来代替索引名称。官方文档链接
请求方式
# 支持PUT, POST方式
PUT|POST /<index>/_alias/<alias>
# 用 _aliases 也可以的, 但是我们通常用 _alias, 字母能少写一个是一个
PUT|POST /<index>/_aliases/<alias>
当然也可以使用 `_all`来给当前集群的所有索引添加别名 => 这个有点不正常了
`PUT|POST` /_all/_alias/<alias>
查询参数
master_timeout
(可选,时间单位)连接到主节点的等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。
timeout
(可选,时间单位) 等待超时时间。如果在超时时间已过之前没有响应, 则返回错误。 默认是值 30s。
Request body
filter
(Required, query object) . 筛选查询(Filter query) 用来限制索引别名, 使用该别名时只返回符合过滤条件的文档。(这个应该是有body的时候才是必填的, 没有body就不用填写了)
这个有点像mysql中的view, 同一个table可以建立很多个view, 可以组合不同table的数据, 也可以给不同权限的账号建立不同的view来限制其可以访问的数据
routing
(Optional, string) 用于将操作路由到特定分片的自定义路由。
几个栗子
1. 添加基于时间(time-based)的别名
比如给索引logs_20302801
创建一个别名2030
:
PUT /logs_20302801/_alias/2030
2. 添加基于用户(user-based)的别名
创建索引users
, 它有一个字段user_id
, 然后给个别名user_12
, 限制user_id=12的文档:
PUT /users
{
"mappings": {
"properties": {
"user_id":{"type": "integer"}
}
}
}
# 插入几个文档
POST /users/_doc/10
{
"user_id": 10
}
POST /users/_doc/11
{
"user_id": 11
}
POST /users/_doc/12
{
"user_id": 12
}
# 查询, 能看到所有的文档
GET /users/_search
# 给个别名`user_12`, 限制user_id=12的文档:
PUT /users/_alias/user_12
{
"routing": "12",
"filter":{
"term":{
"user_id": 12
}
}
}
# 查询别名, 只能看到 user_id=12的文档
GET /user_12/_search
官方文档举的这个栗子, 朕觉得不是太合适。maybe用"订单列表" 索引, 然后根据订单状态去建别名更适合
3. 在创建索引时添加别名
建立索引 logs_20302801
, 同时添加别名 2030
PUT /logs_20302801
{
"mappings" : {
"properties" : {
"year" : {"type" : "integer"}
}
},
"aliases" : {
"current_day" : {},
"2030" : {
"filter" : {
&#