elasticsearch中的别名是什么?

时间:2018-02-21 13:19:32

标签: elasticsearch

我最近开始在一家使用Elasticsearch的公司工作。虽然它的大部分概念与关系数据库有些相似,而且我能够理解它们,但我仍然不太了解别名的概念。

我在这里找不到任何此类问题,Elasticsearch website提供的信息也没有多大帮助。

有人可以解释别名是什么,理想情况下包括需要它们的情况的例子吗?

3 个答案:

答案 0 :(得分:5)

别名就像软链接或实际索引的快捷方式

优点是能够在index2b上构建或重新索引时具有指向index1a的别名,并且由于所有代码应指向的别名,交换它们的时刻都是原子的

  

重命名别名是一个简单的删除,然后在同一个API中添加操作。这个操作是原子的,不需要担心别名没有指向索引的短时间内:

[编辑]指出@wholevinski别名有其他功能,如:

  

可以为动作指定多个索引...

所有信息都在您链接的页面中

[EDIT2]更多关于为什么原子性的需要/利益

关键是"零停机时间" https://en.wikipedia.org/wiki/Zero_unscheduled_downtimehttps://en.wikipedia.org/wiki/High_availability

https://www.elastic.co/guide/en/elasticsearch/guide/current/index-aliases.html

  

我们将在本书后面详细讨论别名的其他用法。现在我们将解释如何使用它们从旧索引切换到新索引,零停机时间。

答案 1 :(得分:2)

@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

答案 2 :(得分:0)

别名的创建基本上是为了对一组索引进行分组,并使它们可以不加名称地访问。是指向一组索引的指针。您还可以对所有这些索引应用查询/条件。始终在同一组索引上执行查询或创建仪表板时,此功能非常有用。此外,如果将来您更改别名的索引名称,最终用户将不会注意到该更改,因为这对他们来说是透明的,您只会更新指针。