【发布时间】:2018-08-01 02:25:17
【问题描述】:
我最近开始在一家使用 Elasticsearch 的公司工作。虽然它的大部分概念有点类似于关系数据库并且我能够理解它们,但我仍然不太了解别名的概念。
我在这里没有找到任何此类问题,Elasticsearch website 上提供的信息也没有太大帮助。
有人能解释一下别名的用途,最好包括一个需要它们的情况的例子吗?
【问题讨论】:
标签: elasticsearch
我最近开始在一家使用 Elasticsearch 的公司工作。虽然它的大部分概念有点类似于关系数据库并且我能够理解它们,但我仍然不太了解别名的概念。
我在这里没有找到任何此类问题,Elasticsearch website 上提供的信息也没有太大帮助。
有人能解释一下别名的用途,最好包括一个需要它们的情况的例子吗?
【问题讨论】:
标签: elasticsearch
别名就像软链接或实际索引的快捷方式
优点是在 index2b 上构建或重新索引时能够有一个指向 index1a 的别名,并且由于别名的原因,交换它们的时刻是原子的,所有代码都应该指向该别名
重命名别名是在同一个 API 中简单的删除然后添加操作。这个操作是原子的,不用担心别名没有指向索引的短时间:
[EDIT] 正如@wholevinski 所指出的,别名具有其他功能,例如:
可以为一个动作指定多个索引 ...
所有信息都在您链接的页面中
[EDIT2] 更多关于原子性的需要/好处的原因
关键是“零停机时间”https://en.wikipedia.org/wiki/Zero_unscheduled_downtime 或 https://en.wikipedia.org/wiki/High_availability
https://www.elastic.co/guide/en/elasticsearch/guide/current/index-aliases.html
我们将在本书后面更多地讨论别名的其他用途。现在我们将解释如何使用它们从旧索引切换到零停机时间的新索引。
【讨论】:
@arhak 很好地涵盖了这个话题。 一个(至少)让我理解索引价值的用例是需要删除过时的文档,尤其是在使用time-based-indices 时。
例如,您需要将应用程序的日志至少保留一年。您决定使用基于时间的索引,这意味着您使用以下格式保存到索引中:2018-02-logs, 2018-03-logs 等。为了能够在每个索引中搜索,您创建以下别名:
POST /_aliases
{
"actions": [{
"add": {
"alias": "current-logs", "indices": [ "2018-02-logs","2018-03-logs" ]
}
}]
}
查询如下:
GET /current-logs/_search
另一个优点是您可以非常轻松地删除过期值:
POST /_aliases
{
"actions": [
{ "remove": { "alias": "current-logs", "index": "logs_2018-01" }}
]
}
和DELETE /logs_2018-01
【讨论】:
创建别名基本上是为了对一组索引进行分组,并使它们无论名称如何都可以访问。是指向一组索引的指针。您还可以将查询/条件应用于所有这些索引。在始终对同一组索引执行查询或创建仪表板时,它非常有用。此外,如果将来您更改作为别名一部分的索引的名称,最终用户将不会注意到该更改,因为它对他们来说是透明的,您只会更新指针。
【讨论】: