ElasticSearch:同时更新索引,同时对同一索引进行 _reindex

SSG*_*SSG 5 elasticsearch

我们一直使用此链接作为参考,以适应索引中字段映射的任何更改,并且停机时间为零。

问题:考虑上面链接中的相同示例,当我们使用_reindex API将数据从 my_index_v1 重新索引到 my_index_v2 时。ElasticSearch 是否保证在 my_index_v1 中发生的任何并发更新肯定会使其成为 my_index_v2 ?

例如,文档可能会在 my_index_v1 中被 api 重新索引到 my_index_v2 之前或之后更新。

最终,我们只需要确保虽然我们不希望任何映射更改造成任何停机时间(因此 _reindex 使用别名和 ES 的其他很酷的东西),我们还希望确保在此期间没有丢失任何添加/更新大规模的重新索引正在进行中,因为我们正在讨论重新索引 > 50GB 的数据。

谢谢,
桑迪普

gau*_*620 7

reindex api 不会考虑流程启动后所做的更改。您可以做的一件事是完成重新索引流程后。您可以使用version_type:external再次启动流程。这将导致仅从源索引到目标索引的文档具有不同版本并且不存在

这是例子

POST _reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter",
    "version_type": "external"
  }
}
Run Code Online (Sandbox Code Playgroud)

将 version_type 设置为 external 将导致 Elasticsearch 保留源中的版本,创建任何丢失的文档,并更新目标索引中版本比源索引中版本旧的任何文档: