Elasticsearch之aliases

发布时间 2023-09-06 16:34:42作者: emptyironbox

aliases的作用

索引别名可以指向一个或多个索引,允许我们做如下操作:

  • 在运行的集群中可以无缝的从一个索引切换到另一个索引
  • 可以给多个索引分组
  • 可以与路由搭配使用

准备数据

# 创建索引p1
PUT p1/_doc/1
{
  "title":"周一"
}
# 创建索引p2
PUT p2/_doc/1
{
  "title":"周二"
}
# 创建索引p3
PUT p3/_doc/1
{
  "title":"周三"
}
# 创建索引p4
PUT p4/_doc/1
{
  "title":"周四"
}

创建别名

# 创建别名
POST /_aliases 
{
  "actions": [
    {
      "add": {
        "index": "p1",
        "alias": "a1"
      }
    }
  ]
}

端点添加别名形式

PUT /{index}/_alias/{name}
* index,要为哪个索引添加别名
* name,别名的名称

实例:

PUT /p3/_alias/a3

查看别名

GET p1,p3/_alias
# result
{
  "p1": {
    "aliases": {
      "a1": {}
    }
  },
  "p3": {
    "aliases": {
      "a3": {}
    }
  }
}

删除别名

POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "p1",
        "alias": "a1"
      }
    }
  ]
}
或端点删除形式
DELETE /p3/_alias/a3 

检测某个索引是否存在

HEAD /_alias/{别名}

HEAD以状态码的形式返回是别名是否存在,200 - OK是存在,404 - Not Found是不存在

HEAD /_alias/a1
# result
404 - Not Found  

HEAD /_alias/a3
# result  
200 - OK  

检索索引

# 查询指定索引
GET /{index}/_alias/{alias}
# 查询索引p1指向以a开头的所有别名
GET p1/_alias/a*    
# 查询索引p1所有的别名  
GET p1/_alias/*
# 查询所有别名是a开头的索引
GET /_alias/a* 

重命名索引

重命名别名是一个简单的remove操作,然后执行add操作,无需担心短时间内别名不指向索引,因为这个操作原子性的:

POST /_aliases
{
  "actions": [
    {
      "remove":{
        "index": "p1",
        "alias": "a1"
      }
    },
    {
      "add": {
        "index": "p1",
        "alias": "a_1"
      }
    }
  ]
}

为多个索引指向别名

POST /_aliases
{
  "actions":[
      {"add":{"index":"p1","alias":"a1"}},
      {"add":{"index":"p2","alias":"a1"}}
    ]
}

也可以使用indices数组语法在一个操作中为多个索引指向同一个别名

POST /_aliases
{
  "actions": [
    {"add": {"indices": ["p1", "p2"], "alias": "a2"}}
  ]
}

也可以为一个索引指向多个别名

POST /_aliases
{
  "actions": [
    {"add": {"index": "p1", "aliases": ["a21", "a22", "a23"]}}
  ]
}