【发布时间】:2018-11-22 16:10:38
【问题描述】:
您好 elasticsearch 用户/专家,
我在理解 Elasticsearch 的 reindex api 的竞争条件问题时遇到了一些麻烦,我想知道是否有人找到了解决方案。
我已经搜索了很多地方,但找不到任何明确的解决方案(大多数解决方案可以追溯到 reindex api 之前)。
您可能知道,(现在)重新索引文档的标准方法(例如,在更改映射之后)是使用别名。 假设别名指向“old_index”。然后我们使用新映射创建一个名为“new_index”的新索引,我们调用 reindex api 将文档从“old_index”重新索引到“new_index”,然后将别名切换为指向 new_index(并删除指向 old_index 的别名指针)。这似乎是重新索引的标准方式,这也是我在我最近访问的几乎所有网站上看到的。
我的问题如下,使用这种方法,虽然我不想停机(所以用户应该仍然能够搜索文档),我仍然希望能够在重新索引过程中将文档注入 ElasticSearch正在发生:
- 如果在重新索引过程正在进行时仍会传入文档(这可能会花费很多时间),重新索引过程将如何确保将文档提取到旧索引中(以便能够搜索它虽然重新索引过程正在工作)但仍会正确地重新索引到新索引?
- 如果文档在旧索引中被修改,在它被重新索引(映射到新索引)之后,当重新索引过程正在工作时,ElasticSearch 如何确保新索引也考虑到这个修改?
- (与 2 类似。)如果在旧索引中删除了一条记录,则在重新索引(映射到新索引)之后,在重新索引过程进行时,ElasticSearch 如何确保也考虑到此删除在新索引中?
基本上在无法为文档犯任何索引错误的情况下,如何继续确保重新索引不会出现上述任何问题?
有人知道吗?如果没有任何停机时间就没有解决方案,那么在这种情况下,我们将如何以最少的停机时间进行?
提前致谢!
【问题讨论】:
标签: elasticsearch kibana