【问题标题】:Create an empty alias in ElasticSearch在 ElasticSearch 中创建一个空别名
【发布时间】:2017-10-19 13:29:41
【问题描述】:

我正在开发一个 java 应用程序来创建一个 elasticSearch 索引。该索引目前每周在开发机器上构建,并且集群手动复制到其他(测试和生产)机器上的现有集群。新方案仍涉及每周从头开始重建索引。

我正在使用 5.6.3 和低级和高级别的客户端进行更新。经过一些初步调查(并获得了相当多的帮助),我的目标是使用别名进行 2(或 3)阶段开发。

最初,我将在 dev 上为现有索引设置别名,将所有新数据写入别名,然后用别名替换索引。我能想到的其他替代方案是

  1. 每次都重新创建集群,我认为这总是 一个相当手动的过程,或

  2. 重新创建索引并移动它们。由于索引无法重命名 (或者我相信,这总是会更加笨拙,因为它涉及在一台机器上创建索引,从活动机器中删除它们然后读取它们。目前我们在集群中有一个节点,所以这将 涉及相当长的停机时间(尽管如果别名变成 作为一个糟糕的解决方案,我想我们可以添加另一个节点并一次替换一个节点的索引)。

所以我选择了

  1. 使用别名。这样,我可以从重新创建索引并将其复制过来(阶段 1)开始,然后转向更复杂的解决方案,以编程方式恢复数据并且不会降低弹性搜索(阶段 3 是我们的梦想,如果我们曾经更新索引让我们的数据正确排序!)

所以问题来了。我真的很想直接创建索引的空别名。据我所知,这是不可能的。在其他页面中,github issue. 虽然来自较旧版本,但看起来像这样的举动会适得其反,并且不是弹性想要引入的东西。所以我只是想知道如果

  1. 我完全看错了设计,或者
  2. 现在有一种方法可以创建空别名或
  3. 我是否应该创建一个别名,然后从别名中创建delete all documents

【问题讨论】:

  • 我不确定空别名会给你带来什么。您始终可以使用单个别名。 Live 应用程序将指向别名。加载过程将创建一个新索引,然后您可以将别名从旧索引切换到新索引。单独删除所有文档不是一个好主意。相反,您可以删除索引。此外,您还可以探索 Elasticsearch Curator 以获取索引的快照/恢复。
  • 好吧,我想我误解了。我认为别名是索引元数据的一部分,因此您不能将别名与另一个索引交换。我正在考虑将应用程序指向索引并创建临时别名以重建索引,然后将别名换回。实际上,别名可以指向不同的索引,因此相反并设置应用程序更有意义查看别名 ([appind]),然后将其指向索引 - 每周更改 - 称为 appind [ddmmyyyyhhmm]。 (这样对吗!?)
  • 正确。应用程序无需担心数据是来自 19 日还是 20 日。它只会指向别名appind。数据恢复/加载完成后,您可以将别名与单个帖子交换。您可以在同一请求中执行删除操作和添加操作,以将别名从旧索引交换到新索引。

标签: elasticsearch elasticsearch-5


【解决方案1】:

“添加评论作为答案”:正确。应用程序无需担心数据是来自 19 日还是 20 日。应用程序可以简单地指向别名appind。数据恢复/加载完成后,您可以使用单个 POST 请求将别名从旧索引交换到新索引。您可以在同一请求中执行删除操作和添加操作,以将别名从旧索引交换到新索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多