gpt4 book ai didi

elasticsearch - 在更新文档时为Elasticsearch重新编制索引?

转载 作者:行者123 更新时间:2023-12-02 22:23:42 25 4
gpt4 key购买 nike

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

我目前正在使用尚不具有重新索引功能的Java API,因此使用批量可以解决我的问题。所以解决方案看起来像这样

ref How to reindex in ElasticSearch via Java API

很久以前

  • 创建索引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之间,重新索引自重新索引以来已建立索引的所有文档?但是,仍然可能是在重命名别名和第二次重新索引
  • 之间更新了文档的情况。
  • 还是应该在重新索引时锁定?似乎是一个糟糕的解决方案。.
  • 最佳答案

    我认为这是您的真正问题:

    But what happens, while reindexing all documents, a document that was reindexed in the beginning is updated from a user. Or that between reindexing and rename aliases the above happpens?



    我只是 asked a question非常接近,但是仍然有一些问题需要单独解决。但是,我的研究使我能够回答这个问题。请参阅问题以获取详细信息和引用。

    要回答您的问题,您可以在重新索引之前创建第二个别名。我将其称为 duplicate_write_alias,您就拥有了您的应用程序,如果它看到了这个第二个别名,请先通过这两个别名先写入旧索引,然后再写入新索引。 (顺序对于取消潜在的比赛很重要)。索引完成后,索引过程将删除此 duplicate_write_alias,并将 MY_INDEX别名移至新的 MY_INDEX_2,如上所述。在 one atomic command中进行别名切换。

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

    关于elasticsearch - 在更新文档时为Elasticsearch重新编制索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40103594/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com