为什么 Elasticsearch 别名不是唯一的
Why are Elasticsearch aliases not unique
Elasticsearch 文档 describes aliases 作为以零停机时间重新索引数据的功能:
- 创建新索引并对整个数据进行索引
- 让您的别名指向新索引
- 删除旧索引
如果别名是唯一的,这将是一项很棒的功能,但一个别名可能指向多个索引。考虑到旧索引的删除可能会失败,我的应用程序可能会与两个可能不同步的索引对话。更糟糕的是:应用程序对此一无所知。
为什么可以重复使用别名?
它允许您轻松拥有多个索引,这些索引既可以单独使用,也可以与其他索引一起使用。例如,当您有一个日志记录索引时,这很有用,有时您想查询最近的(logs-recent 别名),有时又想查询所有内容(logs 别名)。可能还有很多其他用例,但这个对我来说是第一个。
根据文档,您可以在一个请求中发送删除和添加:
curl -XPOST 'http://localhost:9200/_aliases' -d '
{
"actions" : [
{ "remove" : { "index" : "test1", "alias" : "alias1" } },
{ "add" : { "index" : "test2", "alias" : "alias1" } }
]
}'
成功后你可以删除你的旧索引,如果失败你将只有一个额外的索引占用一些 space 直到它被清除。
Elasticsearch 文档 describes aliases 作为以零停机时间重新索引数据的功能:
- 创建新索引并对整个数据进行索引
- 让您的别名指向新索引
- 删除旧索引
如果别名是唯一的,这将是一项很棒的功能,但一个别名可能指向多个索引。考虑到旧索引的删除可能会失败,我的应用程序可能会与两个可能不同步的索引对话。更糟糕的是:应用程序对此一无所知。
为什么可以重复使用别名?
它允许您轻松拥有多个索引,这些索引既可以单独使用,也可以与其他索引一起使用。例如,当您有一个日志记录索引时,这很有用,有时您想查询最近的(logs-recent 别名),有时又想查询所有内容(logs 别名)。可能还有很多其他用例,但这个对我来说是第一个。
根据文档,您可以在一个请求中发送删除和添加:
curl -XPOST 'http://localhost:9200/_aliases' -d '
{
"actions" : [
{ "remove" : { "index" : "test1", "alias" : "alias1" } },
{ "add" : { "index" : "test2", "alias" : "alias1" } }
]
}'
成功后你可以删除你的旧索引,如果失败你将只有一个额外的索引占用一些 space 直到它被清除。