索引别名 #
别名是可以指向一个或多个索引的虚拟索引名称。
如果数据分布在多个索引中,而不是跟踪要查询的索引,则可以创建别名并进行查询。
例如,如果要将日志存储到基于月份的索引中,并且经常查询前两个月的日志,则可以创建一个 last_2_months
别名,并每月更新其指向的索引。
您可以随时更改别名指向的索引,所以在应用程序中使用别名引用索引可以让您在不停机的情况下重新索引数据。
创建索引别名 #
要创建索引别名,请使用 POST 请求:
POST _aliases
使用 actions
方法指定要执行的操作列表。此命令创建名为 alias1
的别名,并将 index-1
添加到此别名:
POST _aliases
{
"actions": [
{
"add": {
"index": "index-1",
"alias": "alias1"
}
}
]
}
您应该看到以下响应:
{
"acknowledged": true
}
如果此请求失败,请确保要添加到别名的索引已存在.
要检查 alias1
是否引用 index-1
,请运行以下命令
GET alias1
索引别名添加与删除操作 #
您可以在同一 别名
操作中执行多个操作。
例如,以下命令删除 index-1
并将 index-2
添加到 alias1
:
POST _aliases
{
"actions": [
{
"remove": {
"index": "index-1",
"alias": "alias1"
}
},
{
"add": {
"index": "index-2",
"alias": "alias1"
}
}
]
}
add
和 remove
操作以原子方式发生,这意味着 alias1
不会同时指向 index-1
和 index-2
.
还可以基于索引模式添加索引:
POST _aliases
{
"actions": [
{
"add": {
"index": "index*",
"alias": "alias1"
}
}
]
}
索引别名管理 #
要列出别名到索引的映射,请运行以下命令:
GET _cat/aliases?v
响应示例 #
alias index filter routing.index routing.search
alias1 index-1 * - -
要检查别名指向的索引,请运行以下命令:
GET _alias/alias1
响应示例 #
{
"index-2": {
"aliases": {
"alias1": {}
}
}
}
相反,要查找指向特定索引的别名,请运行以下命令:
GET /index-2/_alias/*
要检查别名是否存在,请运行以下命令:
HEAD /alias1/_alias/
创建索引时添加别名 #
您可以在创建索引时向别名添加索引:
PUT index-1
{
"aliases": {
"alias1": {}
}
}
根据筛选创建别名 #
您可以创建一个过滤的别名来访问基础索引中的文档或字段子集。
此命令仅向 alias1
添加特定的时间戳字段:
POST _aliases
{
"actions": [
{
"add": {
"index": "index-1",
"alias": "alias1",
"filter": {
"term": {
"timestamp": "1574641891142"
}
}
}
}
]
}
索引别名选项 #
您可以指定下表中显示的选项:
选项 | 类型 | 描述 | 必填 |
---|---|---|---|
index | String | 别名指向的索引名 | Yes |
alias | String | 别名名称 | No |
filter | Object | 过滤条件 | No |
routing | String | 路由到特定分片,可以分别设置 search_routing 或者 index_routing 参数 | No |
is_write_index | String | 别名是否允许接收写入操作,如果不指定则表示不允许 | No |