Link Search Menu Expand Document Documentation Menu

索引别名

别名是一个虚拟索引名称,可以指向一个或多个索引。

如果您的数据分散在多个索引中,您无需跟踪要查询哪些索引,而是可以创建一个别名并查询它。

例如,如果您根据月份将日志存储到索引中,并且经常查询前两个月的日志,则可以创建一个名为 last_2_months 的别名,并每月更新其指向的索引。

由于您可以随时更改别名指向的索引,因此在应用程序中使用别名引用索引可以实现在不停机的情况下重新索引数据。

创建别名

要创建别名,请使用 POST 请求

POST _aliases

使用 actions 方法指定要执行的操作列表。此命令创建一个名为 alias1 的别名,并将 index-1 添加到此别名中。

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "index-1",
        "alias": "alias1"
      }
    }
  ]
}

返回以下响应

{
   "acknowledged": true
}

如果请求失败,请确保您要添加到别名中的索引已存在。

您还可以使用以下请求之一创建别名

PUT <index>/_aliases/<alias name>
POST <index>/_aliases/<alias name>
PUT <index>/_alias/<alias name>
POST <index>/_alias/<alias name>

上述请求中的 <index> 可以是索引名称、逗号分隔的索引名称列表或通配符表达式。使用 _all 来指代所有索引。

要检查 alias1 是否指向 index-1,请运行以下命令之一

GET /_alias/alias1
GET /index-1/_alias/alias1

要获取别名引用的索引映射和设置信息,请运行以下命令

GET alias1

添加或删除索引

您可以使用同一个 _aliases 操作执行多个动作。例如,以下命令将 index-1alias1 中移除,并将 index-2 添加到 alias1 中。

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "index-1",
        "alias": "alias1"
      }
    },
    {
      "add": {
        "index": "index-2",
        "alias": "alias1"
      }
    }
  ]
}

addremove 操作是原子性发生的,这意味着 alias1 不会同时指向 index-1index-2。您还可以根据索引模式添加索引,如下面的 POST 请求所示。

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "index*",
        "alias": "alias1"
      }
    }
  ]
}

remove 操作也支持 must_exist 参数。如果该参数设置为 true 且指定别名不存在,则会抛出异常。如果该参数设置为 false,则在指定别名不存在时不会执行任何操作。must_exist 的默认值为 null。仅当指定的别名都不存在时才会抛出异常。

以下 POST 请求使用 remove 操作,并将 must_exist 参数设置为 true

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "index-1",
        "alias": "alias1",
        "must_exist": true
      }
    }
  ]
}

管理别名

要列出别名到索引的映射,请运行以下命令

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/*

要获取所有索引名称及其别名,请运行以下命令

GET /_alias

要检查别名是否存在,请运行以下命令之一

HEAD /alias1/_alias/
HEAD /_alias/alias1/
HEAD index-1/_alias/alias1/

在创建索引时添加别名

您可以在创建索引时将索引添加到别名中,如下面的 PUT 请求所示

PUT index-1
{
  "aliases": {
    "alias1": {}
  }
}

创建过滤别名

您可以创建过滤别名以访问底层索引中的文档或字段子集。此命令仅将特定时间戳字段添加到 alias1。以下显示了一个示例 POST 请求

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "index-1",
        "alias": "alias1",
        "filter": {
          "term": {
            "timestamp": "1574641891142"
          }
        }
      }
    }
  ]
}

索引别名选项

您可以指定下表所示的选项。

选项 有效值 描述 必需
index 字符串 别名指向的索引名称。
alias 字符串 别名名称。
filter 对象 为别名添加过滤器。
路由 字符串 将搜索限制为关联的分片值。您可以独立指定 search_routingindex_routing
is_write_index 字符串 指定接受对别名的任何写入操作的索引。如果未指定此值,则不允许任何写入操作。

删除别名

要从索引中删除一个或多个别名,请使用以下请求

DELETE <index>/_alias/<alias>
DELETE <index>/_aliases/<alias>

上述请求中的 <index><alias> 都支持逗号分隔列表和通配符表达式。使用 _all 代替 <alias> 可以删除 <index> 中列出的所有索引的别名。

例如,如果 alias1 指向 index-1index-2,您可以运行以下命令从 index-1 中移除 alias1

DELETE index-1/_alias/alias1

运行请求后,alias1 不再指向 index-1,但仍然指向 index-2

剩余 350 字符

有问题?

想要贡献?