在 ElasticSearch 中创建一个空别名

Create an empty alias in ElasticSearch

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

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

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

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

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

所以我选择了

  1. 使用别名。通过这种方式,我可以从重新创建索引并将其复制过来(第 1 阶段)开始,然后转向更复杂的解决方案以编程方式恢复数据,而无需关闭 elasticSearch(第 3 阶段是我们的梦想,如果我们曾经让我们的数据正确排序!)

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

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

"Added comment as answer":正确。应用程序无需担心数据是来自 19 日还是 20 日。应用程序可以简单地指向别名 appind。数据 restore/load 完成后,您可以将别名与单个 POST 请求从旧索引交换到新索引。您可以在同一请求中执行删除操作和添加操作,以将别名从旧索引交换到新索引。