- 1. Add index alias API
- 2. Delete index alias API
- 3. Get index alias API
- 1. 创建索引时,添加两个别名
- 别名 2030,仅返回 logs_20302801 索引中 year=2030 的文档;
- 获取索引下的所有别名信息
- 获取指定的别名信息
- 基于通配符获取别名
- 5. Update index alias API
- 添加一个别名
- 移除一个别名
- 重命名一个别名,先删除旧的再添加新的
- 将一个别名关联到多个索引
- 使用通配符将多个索引关联到别名,别名的关联不会自动更新,只关联现在匹配的索引;
- 如果创建的索引后发现弄错了,可以将名称映射到正确创建的索引上
- 过滤后的别名
- 要创建有过滤的别名,首先我们需要确保字段已经存在于映射中:
- routing
- 1. 别名被创建后,所有的操作自动使用 1 作为 routing 值;
- 2. 可以给搜索与索引指定不同的 routing 值;
- 如果搜索操作使用 routing:1,2,并且别名也设置了search_routing:2,3,
- 并且两个routing有交集2,那么使用这个交集2作为 routing
- 别名指向多个索引,且配置了写索引,如果通过别名执行Index和Update操作,那么只在写索引上执行;
- aliases API 和 index creation API 来设置写索引
- 交换写索引指向的索引
- Index Aliases,索引别名,有点类似名称映射,一个索引别名可以映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不同的视图。
- 别名不能与关联的索引具有相同的名称;
1. Add index alias API
创建或更新索引别名;
PUT /<index>/_alias/<alias>
Path parameters:
(必须) - 用逗号隔开的索引名列表,或索引名称的通配符表达式;
- 要将集群中所有的索引添加导别名中,使用 _all;
- 索引别名的名称;
- Query parameters:
- master_timeout:(可选,时间单位) 指定等待连接到主节点的时间。如果在超时到期前没有收到响应,则请求失败并返回错误。默认为30s。
- timeout:(可选,时间单位) 指定等待响应的时间。如果在超时到期前没有收到响应,则请求失败并返回错误。默认为30s。
Request body:
- filter:(必需的,查询对象) 筛选查询,用于限制索引别名。
- 如果指定,则索引别名仅适用于筛选过滤后返回的文档。
- routing:(可选的,字符串) 自定义路由值,用于将操作路由到特定的切分。
- filter:(必需的,查询对象) 筛选查询,用于限制索引别名。
示例:
添加一个基于时间的别名
- 下面的请求为 logs_20302801 索引创建别名 2030;
PUT /logs_20302801/_alias/2030
- 下面的请求为 logs_20302801 索引创建别名 2030;
添加基于用户的别名
- 首先,创建一个索引 users,为 user_id 字段创建一个映射;
- 然后添加特定用户 user_12 的索引别名:
###### 1 PUT /users { "mappings" : { "properties" : { "user_id" : {"type" : "integer"} } } } ###### 2 PUT /users/_alias/user_12 { "routing" : "12", "filter" : { "term" : { "user_id" : 12 } } }
在索引创建期间添加别名
- 您可以使用 create index API 在索引创建期间添加索引别名;
PUT /logs_20302801 { "mappings": { "properties": { "year": { "type": "integer" } } }, "aliases": { "current_day": {}, "2030": { "filter": { "term": { "year": 2030 } } } } }
- 您可以使用 create index API 在索引创建期间添加索引别名;
2. Delete index alias API
删除现有索引别名。
DELETE /<index>/_alias/<alias>
Path parameters:
:(必须) - 用逗号隔开的索引名列表,或索引名称的通配符表达式;
- 要包含集群中所有的索引,使用 _all 或 *;
:(必须) - 要删除的索引别名列表,可以是逗号隔开的列表,或索引别名的通配符表达式;
- 要删除所有别名,使用 _all 或 *;
- Query parameters:
- master_timeout:(可选,时间单位) 指定等待连接到主节点的时间。如果在超时到期前没有收到响应,则请求失败并返回错误。默认为30s。
- timeout:(可选,时间单位) 指定等待响应的时间。如果在超时到期前没有收到响应,则请求失败并返回错误。默认为30s。
3. Get index alias API
返回一个或多个别名的信息;
GET /<index>/_alias/<alias>
Path parameters:
:(必须) - 用逗号隔开的索引名列表,或索引名称的通配符表达式;
- 要包含集群中所有的索引,使用 _all 或 *;
:(必须) - 要删除的索引别名列表,可以是逗号隔开的列表,或索引别名的通配符表达式;
- 要删除所有别名,使用 _all 或 *;
Query parameters:
- allow_no_indices:(可选,布尔值)
- 默认值为 true ,假如通配符表达式或 _all 仅检索丢失或关闭的索引,那么请求不会返回 Error;
- 这个参数让索引别名可以指向一个丢失或关闭的索引;
- expand_wildcards:(可选,字符串)
- 控制通配符表达式可以扩展到什么类型的索引。使用逗号分隔时可以接收多个值,如 open、hidden。默认值 all,有效值:
- all:展开打开和关闭索引,包括隐藏索引;
- open:只展开到打开的索引;
- closed:只展开到闭合的索引;
- hidden:通配符的扩展将包括隐藏索引。必须与 open、closed 或两者结合使用;
- none:不接受通配符表达式;
- 控制通配符表达式可以扩展到什么类型的索引。使用逗号分隔时可以接收多个值,如 open、hidden。默认值 all,有效值:
- ignore_unavailable:(可选,布尔值)
- 如果为真,则响应中不包括缺失或关闭索引。默认值为 false
- local:(可选,布尔值)
- 如果为真,则请求仅从本地节点检索信息。默认值为 false,这意味着从主节点检索信息。
- allow_no_indices:(可选,布尔值)
示例:
获取指定的别名信息
GET /_alias/2030
基于通配符获取别名
GET /_alias/20*
<a name="wLhae"></a>
# 4. Index alias exists API
- 检查索引别名是否存在;
```json
HEAD /_alias/<alias>
HEAD /<index>/_alias/<alias>
- Path parameters:
:(必须) - 用逗号隔开的索引名列表,或索引名称的通配符表达式;
- 要包含集群中所有的索引,使用 _all 或 *;
:(必须) - 要删除的索引别名列表,可以是逗号隔开的列表,或索引别名的通配符表达式;
- 要删除所有别名,使用 _all 或 *;
- Query parameters:
- expand_wildcards:(可选,字符串)
- 控制通配符表达式可以扩展到什么类型的索引。使用逗号分隔时可以接收多个值,如 open、hidden。默认值 all,有效值:
- all:展开打开和关闭索引,包括隐藏索引;
- open:只展开到打开的索引;
- closed:只展开到闭合的索引;
- hidden:通配符的扩展将包括隐藏索引。必须与 open、closed 或两者结合使用;
- none:不接受通配符表达式;
- 控制通配符表达式可以扩展到什么类型的索引。使用逗号分隔时可以接收多个值,如 open、hidden。默认值 all,有效值:
- ignore_unavailable:(可选,布尔值)
- 如果为真,则响应中不包括缺失或关闭索引。默认值为 false
- local:(可选,布尔值)
- 如果为真,则请求仅从本地节点检索信息。默认值为 false,这意味着从主节点检索信息。
- expand_wildcards:(可选,字符串)
Response codes:
- 200:代表所有指定的别名都存在;
- 404:代表一个或多个指定的别名不存在;
示例:
HEAD /_alias/2030 HEAD /_alias/20* HEAD /logs_20302801/_alias/*
5. Update index alias API
添加或移除索引别名;
POST /_aliases { "actions" : [ { "add" : { "index" : "twitter", "alias" : "alias1" } } ] }
Query parameters:
- master_timeout:(可选,时间单位) 指定等待连接到主节点的时间。如果在超时到期前没有收到响应,则请求失败并返回错误。默认为30s。
- timeout:(可选,时间单位) 指定等待响应的时间。如果在超时到期前没有收到响应,则请求失败并返回错误。默认为30s。
- Request body:
- actions:(必须,数组)
- add:给索引添加一个别名
- remove:从索引中移除一个别名;
- remove_index:删除一个索引,或别名,和 delete index API 一样的效果;
- action object:
- index:索引名的通配符表达式(与 indices 必须二选一);
- indices:索引名数组(与 index 必须二选一);
- alias:别名通配符,或用逗号隔开的别名列表(与 aliases 必须二选一);
- aliases :别名数组(与 alias 必须二选一);
- filter:(可选)将筛选后的结果映射到别名;
- is_hidden:(可选,布尔值) 如果为真,默认情况下将从通配符表达式中排除别名,除非在请求中使用 expand_wildcards 参数进行覆盖,类似于隐藏索引。此属性必须在共享别名的所有索引上设置为相同的值。默认值为false。
- is_write_index:(可选,布尔值) 如果为真,则将这个索引设为别名的写索引。默认值为 false。
- 一个别名同一时间只能有一个写索引;
- 没有为索引显式设置 “is_write_index: true” 且只关联了一个索引的别名,将使被关联的索引表现为写索引,直到关联了另一个索引为止。
- routing:(可选的,字符串) 自定义路由值,用于将操作路由到特定的切分。
- index_routing:(可选的,字符串) 自定义路由值,用于别名的索引操作。
- search_routing:(可选的,字符串) 自定义路由值,用于别名的搜索引操作。
- actions:(必须,数组)
:::danger
- 将一个索引关联到多个别名,是会报错的;
- 当使用通配符匹配索引名,去关联别名时,别名关联的只是此刻匹配到的索引;之后新增的符合匹配的索引,或删除一个匹配的索引,别名关联的索引是不会更新的;
- actions 中如果任意一个报错,所有的操作都会无效;
- 别名与关联的索引名称不能具有相同的名称;
- 别名和 filter 提供了一种简单的方法来创建相同索引的不同“视图”;
- routing 可以与 filter 一起使用,避免不必要的分片操作;
- 搜索 routing 可以包含多个逗号隔开的值,索引 routing 只能指定一个值;
- 同一时刻,别名只能有一个写索引;
如果别名关联了多个索引,且没有指定写索引,那么写操作不被允许; :::
示例: ```json
添加一个别名
POST /_aliases { “actions” : [ { “add” : { “index” : “test1”, “alias” : “alias1” } } ] }
移除一个别名
POST /_aliases { “actions” : [ { “remove” : { “index” : “test1”, “alias” : “alias1” } } ] }
重命名一个别名,先删除旧的再添加新的
POST /_aliases { “actions” : [ { “remove” : { “index” : “test1”, “alias” : “alias1” } }, { “add” : { “index” : “test1”, “alias” : “alias2” } } ] }
将一个别名关联到多个索引
POST /_aliases { “actions” : [ { “add” : { “index” : “test1”, “alias” : “alias1” } }, { “add” : { “index” : “test2”, “alias” : “alias1” } } ] }
POST /_aliases { “actions” : [ { “add” : { “indices” : [“test1”, “test2”], “alias” : “alias1” } } ] }
使用通配符将多个索引关联到别名,别名的关联不会自动更新,只关联现在匹配的索引;
POST /_aliases { “actions” : [ { “add” : { “index” : “test*”, “alias” : “all_test_indices” } } ] }
如果创建的索引后发现弄错了,可以将名称映射到正确创建的索引上
PUT test #———————-错误创建的索引 PUT test_2 #———————-正确创建的索引 POST /_aliases { “actions” : [ { “add”: { “index”: “test_2”, “alias”: “test” } }, #———-映射到想要的别名上 { “remove_index”: { “index”: “test” } } #———-删除索引 ] }
过滤后的别名
要创建有过滤的别名,首先我们需要确保字段已经存在于映射中:
PUT /test1 { “mappings”: { “properties”: { “user” : { “type”: “keyword” } } } } POST /_aliases { “actions”: [ { “add”: { “index”: “test1”, “alias”: “alias2”, “filter”: { “term”: { “user”: “kimchy” } } } } ] }
routing
1. 别名被创建后,所有的操作自动使用 1 作为 routing 值;
POST /_aliases { “actions”: [ { “add”: { “index”: “test”, “alias”: “alias1”, “routing”: “1” } } ] }
2. 可以给搜索与索引指定不同的 routing 值;
POST /_aliases { “actions”: [ { “add”: { “index”: “test”, “alias”: “alias2”, “search_routing”: “1,2”, “index_routing”: “2” } } ] }
如果搜索操作使用 routing:1,2,并且别名也设置了search_routing:2,3,
并且两个routing有交集2,那么使用这个交集2作为 routing
GET /alias2/_search?q=user:kimchy&routing=2,3
别名指向多个索引,且配置了写索引,如果通过别名执行Index和Update操作,那么只在写索引上执行;
aliases API 和 index creation API 来设置写索引
POST /_aliases { “actions”: [ { “add”: { “index”: “test”, “alias”: “alias1”, “is_write_index”: true } }, { “add”: { “index”: “test2”, “alias”: “alias1” } } ] }
交换写索引指向的索引
POST /_aliases { “actions”: [ { “add”: { “index”: “test”, “alias”: “alias1”, “is_write_index”: false } }, { “add”: { “index”: “test2”, “alias”: “alias1”, “is_write_index”: true } } ] } ```