别名操作
> 文档中心 > 文档中心 > INFINI Easysearch > 功能手册 > 文档操作 > 别名操作

索引别名 #

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

如果数据分布在多个索引中,而不是跟踪要查询的索引,则可以创建别名并进行查询。

例如,如果要将日志存储到基于月份的索引中,并且经常查询前两个月的日志,则可以创建一个 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"
      }
    }
  ]
}

addremove 操作以原子方式发生,这意味着 alias1 不会同时指向 index-1index-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"
          }
        }
      }
    }
  ]
}

索引别名选项 #

您可以指定下表中显示的选项:

选项类型描述必填
indexString别名指向的索引名Yes
aliasString别名名称No
filterObject过滤条件No
routingString路由到特定分片,可以分别设置 search_routing 或者 index_routing 参数No
is_write_indexString别名是否允许接收写入操作,如果不指定则表示不允许No