首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch在更新文档时重新编制索引?

Elasticsearch在更新文档时重新编制索引?
EN

Stack Overflow用户
提问于 2016-10-18 08:46:11
回答 2查看 4.3K关注 0票数 2

如果我已经更改了索引的映射并想要重新索引,怎么办?

我目前正在使用Java,它还没有重新索引功能,所以使用bulk可以解决我的问题。所以解决方案应该是这样的

参考文献如何通过Java在ElasticSearch中重新索引

很久以前的

  • 创建索引MY_INDEX_1
  • 为MY_INDEX_1创建映射
  • 创建别名MY_INDEX_1 -> MY_INDEX
  • 在MY_INDEX中创建文档

时间重新索引!

  • 列表项目
  • 创建索引MY_INDEX_2
  • 为MY_INDEX_2创建映射
  • 滚动搜索+将所有文档从MY_INDEX_1打包到MY_INDEX_2

重命名与删除旧索引

  • 创建别名MY_INDEX_2 -> MY_INDEX
  • 删除别名MY_INDEX_1 -> MY_INDEX
  • 删除索引MY_INDEX_1

但是,在重新编制所有文档的索引时,从用户那里更新开始重新编制索引的文档会发生什么情况。或者,在重新索引和重命名别名之间,上面发生的事情?

可能的解决方案?

  • 一种方法是使用外部版本,例如它不会用更高的版本覆盖文档。
  • 或者可以用另一种方式解决呢?
  • 还是在重命名别名和删除my_index_1之间,重新编制自重新索引以来已索引的所有文档的索引?但是,在重命名别名和第二次重新索引之间已经更新了一个文档。
  • 还是我们应该在重新编制索引时锁定?似乎是个糟糕的解决方案。
EN

回答 2

Stack Overflow用户

发布于 2017-07-08 02:03:04

我想这才是你真正的问题:

但是,在重新编制所有文档的索引时,从用户那里更新开始重新编制索引的文档会发生什么情况。或者,在重新索引和重命名别名之间,上面发生的事情?

我只是提出一个问题,这是非常接近,但仍然有问题需要单独解决。然而,我的研究允许我回答这个问题。有关详细信息和参考资料,请参阅问题。

要回答您的问题,请在重新索引之前创建第二个别名。我将其称为duplicate_write_alias,如果它看到了第二个别名,则通过这两个别名写入第一个旧的索引,然后写入新的索引。(这个命令对于取消一场潜在的比赛很重要)。索引完成后,索引过程将删除此duplicate_write_alias并将MY_INDEX别名移动到新的MY_INDEX_2,如前所述。在一个原子命令中执行别名切换。

正如我在我的问题中指出的,您仍然必须处理潜在的“索引不存在”错误,因为在应用程序检查别名是否存在和别名被删除之间还存在竞争。我希望有一个更好的答案,比‘总是写两次,忽略错误’或‘检查和希望最好’.

票数 3
EN

Stack Overflow用户

发布于 2018-10-12 14:48:16

我认为还有另一种(更难看的方法):您可以在重新索引的同时禁用源索引的写操作,这会导致临时的不可用的apis,您不必:

  • 保持第二个存储以保存真相。
  • 处理不一致
  • 删除的标志文档,在迁移后应该删除。
  • 您可以使用弹性搜索引擎存储来创建indecies之间的快照。
  • 您可以向api的用户发出信号,让他们稍后再发送更改(当索引完成时)。

缺点:

  • 至少对于写操作,您有一个停机时间。
  • 您需要更多的逻辑来处理错误,如果索引不会被设置为允许写重模式(自动恢复等等)。
  • 保存多个索引将导致使用更多的存储空间。

有关更多信息,请访问此处:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/index-modules.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40103594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档