为什么 Elasticsearch 别名不是唯一的

Why are Elasticsearch aliases not unique

Elasticsearch 文档 describes aliases 作为以零停机时间重新索引数据的功能:

  1. 创建新索引并对整个数据进行索引
  2. 让您的别名指向新索引
  3. 删除旧索引

如果别名是唯一的,这将是一项很棒的功能,但一个别名可能指向多个索引。考虑到旧索引的删除可能会失败,我的应用程序可能会与两个可能不同步的索引对话。更糟糕的是:应用程序对此一无所知。

为什么可以重复使用别名?

它允许您轻松拥有多个索引,这些索引既可以单独使用,也可以与其他索引一起使用。例如,当您有一个日志记录索引时,这很有用,有时您想查询最近的(logs-recent 别名),有时又想查询所有内容(logs 别名)。可能还有很多其他用例,但这个对我来说是第一个。

根据文档,您可以在一个请求中发送删除和添加:

curl -XPOST 'http://localhost:9200/_aliases' -d '
{
    "actions" : [
        { "remove" : { "index" : "test1", "alias" : "alias1" } },
        { "add" : { "index" : "test2", "alias" : "alias1" } }
    ]
}'

成功后你可以删除你的旧索引,如果失败你将只有一个额外的索引占用一些 space 直到它被清除。