gpt4 book ai didi

Elasticsearch 重新索引竞争条件

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

您好 elasticsearch 用户/专家,

我在理解 Elasticsearch 的 reindex api 的竞争条件问题时遇到了一些麻烦,我想知道是否有人找到了解决方案。

我搜索了很多地方,找不到任何明确的解决方案(大多数解决方案可以追溯到 reindex api 之前)。

您可能知道,(现在)重新索引文档的标准方法(例如,在更改映射之后)是使用别名。
假设别名指向“old_index”。然后我们使用新映射创建一个名为“new_index”的新索引,我们调用 reindex api 将文档从“old_index”重新索引到“new_index”,然后将别名切换为指向 new_index(并删除指向 old_index 的别名指针)。似乎这是重新索引的标准方式,这也是我在我访问的几乎所有最近的网站上看到的。

对于使用此方法,我的问题如下,虽然我不希望停机(因此用户应该仍然能够搜索文档),并且我仍然希望能够在重新索引过程发生时将文档注入(inject) ElasticSearch:

  • 如果在重新索引过程正在进行时仍会传入文档(这可能会花费很多时间),重新索引过程将如何确保将文档摄取到旧索引中(以便能够在重新索引时搜索它进程正在运行)但仍会正确地重新索引到新索引?
  • 如果文档在旧索引中被修改,在它被重新索引(映射到新索引)之后,当重新索引过程正在工作时,ElasticSearch 将如何确保新索引中也考虑到这种修改?
  • (与 2 类似。)如果在旧索引中删除了一条记录,在它被重新索引(映射到新索引)之后,在重新索引过程正在进行时,ElasticSearch 如何确保在新索引中也考虑到这种删除指数?

  • 基本上在无法为文档犯任何索引错误的情况下,如何继续确保重新索引不会出现上述任何问题?

    有人知道吗?如果没有任何停机时间就没有解决方案,那么在这种情况下,我们将如何以最少的停机时间进行?

    提前致谢!

    最佳答案

    道歉,如果它太冗长,但我的两分钱:

    If documents would still be incoming while the reindexing process is working (which would probably take a lot of time), how would the reindexing process ensure that the document would be ingested in the old index (to be able to search for it while the reindexing process is working) but still would be correctly reindexed to the new index?



    当从源到目标进行重新索引时,别名将(并且必须)仍然指向 source_index .此索引的所有修改/更改都以独立方式发生,这些更新/删除应立即生效。

    假设 source_index 的状态从 t 更改至 t+1
    如果您在 t 上运行过重新索引作业至 dest_index , 它仍然会消耗 source_index 的快照数据在 t .您需要再次运行重新索引作业才能获得 source_index 的最新数据即 t+1 处的数据在您的 dest_index .

    source_index 上的摄取以及来自 source_index 的摄取至 destination_index都是独立的交易/流程。

    重新索引作业永远不会保证 source_index 之间的一致性。和 dest_index .

    If a document is modified in the old index, after it has been reindexed (mapped to the new index), while the reindexing process is working, how would ElasticSearch ensure that this modification is also taken account in the new index?



    新索引中不会考虑它,因为重新索引将使用 source_index 的快照在时间 t .

    您需要再次执行重新索引。对于这种通用方法,将有一个调度程序,每隔几个小时运行一次重新索引过程。

    您可以在 source_index 上进行更新/删除。每隔几分钟(如果您使用调度程序)或实时(如果您使用任何基于事件的方法)。

    但是,对于完整索引(从 source_indexdest_index ),将其安排为一天一次或两次,因为这是一个昂贵的过程。

    (Similar to 2.) If a record is deleted in the old index, after it has been reindexed (mapped to the new index), while the reindexing process is working, how would ElasticSearch ensure that this removal is also taken account in the new index?



    同样,您需要运行一个新的作业/重新索引过程。

    版本类型:外部

    顺便说一句,在重新索引期间您可以做的一个有趣的事情是利用 version_type:external 这将确保仅来自 source_index 的更新/缺失文档将在 dest_index 中重新编制索引

    你可以引用这个 LINK有关这方面的更多信息
    POST _reindex
    {
    "source": {
    "index": "source_index"
    },
    "dest": {
    "index": "dest_index",
    "version_type": "external"
    }
    }

    关于Elasticsearch 重新索引竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434767/

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