如何在没有过时读取的情况下重新索引elasticsearch?

ht4b089n  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(0)|浏览(176)

我有大量的读/写操作索引。我的索引有一个读别名和一个写别名。当我需要更新索引中的Map时,我会执行以下过程:
使用新Map创建新索引,
将写别名添加到新索引。
删除旧索引的写入别名。
像这样重新索引数据

  1. POST _reindex?wait_for_completion=false
  2. {
  3. "conflicts": "proceed",
  4. "source": {
  5. "index": "old-index"
  6. },
  7. "dest": {
  8. "op_type": "create",
  9. "index": "new-index"
  10. }
  11. }

重新索引时,读别名指向旧索引,而写别名指向新索引
重新索引完成后,我在新索引上创建一个读取别名,并删除旧索引上的读取别名。
这个过程很好,但有一个警告。重新索引数据对于应用程序读取来说是过时的,也就是说,在我将读取切换到新索引之前,无法读取更新。
因为我有相当大的索引,重新索引需要很多小时。
有没有办法在不读取过时数据的情况下处理重新索引?
我当然想在重新索引时同时写入两个索引,但据我所知这是不可能的。
我能想到的唯一解决方法是在客户端进行编辑,因此在重新索引期间,所有写入都会在两个单独的请求中同时发送到两个索引。
有什么想法或意见是非常感谢?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题