elasticsearch 弹性搜索重新索引竞赛条件,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 弹性搜索重新索引竞赛条件,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 弹性搜索重新索引竞赛条件

elasticsearch 弹性搜索重新索引竞赛条件,elasticsearch,kibana,elasticsearch,Kibana,您好elasticsearch用户/专家 我在理解Elasticsearch的reindex api的竞争条件问题时有点困难,我想听听是否有人找到了解决方案 我搜索了很多地方,没有找到任何清晰的解决方案(大多数解决方案都可以追溯到reindex api之前) 您可能知道,(现在)对文档重新编制索引的标准方法(例如,在更改映射之后)是使用别名。 假设别名指向“old_index”。然后,我们使用新映射创建一个名为“new_index”的新索引,调用reindex api将文档从“old_index

您好elasticsearch用户/专家

我在理解Elasticsearch的reindex api的竞争条件问题时有点困难,我想听听是否有人找到了解决方案

我搜索了很多地方,没有找到任何清晰的解决方案(大多数解决方案都可以追溯到reindex api之前)

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

对于使用此方法,我的问题如下,虽然我不希望停机(因此用户仍然可以搜索文档),但我仍然希望能够在重新索引过程中将文档注入ElasticSearch:

  • 如果在重新编制索引的过程中仍然会传入文档(这可能需要很多时间),那么重新编制索引的过程将如何确保文档将被接收到旧索引中(以便能够在重新编制索引的过程中进行搜索),但仍然会正确地重新编制到新索引
  • 如果在重新索引(映射到新索引)后,文档在旧索引中被修改,而重新索引过程正在进行,ElasticSearch如何确保在新索引中也考虑到此修改
  • (类似于2。)如果记录在旧索引中被删除,在重新索引(映射到新索引)后,同时重新索引过程正在进行,ElasticSearch如何确保在新索引中也考虑到该删除
  • 基本上,在一个无法承受对文档进行任何索引错误的情况下,如何确保重新索引不会出现上述任何问题

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


    提前谢谢

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

    重新编制索引过程正在进行时,文档是否仍将传入 工作(这可能需要很多时间),你会怎么做 重新编制索引过程确保文档将在 旧索引(以便在重新索引过程中能够搜索它) 工作)但仍将正确地重新索引到新索引

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

    假设
    source\u index
    的状态从
    t
    变为
    t+1

    如果您已在
    t
    处运行重新索引作业,以
    dest\u index
    ,它仍将使用
    t
    source\u index
    的快照数据。您需要再次运行重新索引作业,以获得
    源索引
    的最新数据,即
    t+1
    中的数据

    源索引
    处的摄取和从
    源索引
    目标索引
    的摄取都是独立的事务/过程

    重新索引作业永远不会保证
    源索引
    目标索引
    之间的一致性

    如果在旧索引中修改文档,则在修改后 重新索引(映射到新索引),而重新索引过程 在工作中,ElasticSearch将如何确保此修改也有效 在新的指数中考虑了吗

    在新索引中不会考虑它,因为重新索引将利用
    source\u index
    t
    时的快照

    您需要再次执行重新索引。对于这种通用方法,应该有一个调度器,它每隔几个小时运行一次重新编制索引的过程

    您可以每隔几分钟(如果您使用的是scheduler)或实时(如果您使用的是任何基于事件的方法),在
    source\u index
    上进行更新/删除

    但是,对于完整索引(从
    源索引
    目标索引
    ),需要安排一天一次或两次,因为这是一个昂贵的过程

    (类似于2。)如果在旧索引中删除记录,则在 已重新编制索引(映射到新索引),而重新编制索引的过程 正在工作,ElasticSearch如何确保此移除也正常 在新的指数中考虑了吗

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

    版本类型:外部

    正如旁注,在重新编制索引期间,您可以做的一件有趣的事情是使用
    版本类型:external
    ,这将确保只有
    源索引中的更新/缺失文档将在
    目的索引中重新编制索引

    你可以参考这个来了解更多的信息

    POST _reindex
    {
      "source": {
        "index": "source_index"
      },
      "dest": {
        "index": "dest_index",
        "version_type": "external"
      }
    }
    

    谢谢你的详细回复!非常好的外部版本提示,我不知道!不幸的是,重新编制大量数据的索引需要很长时间(可能是几天),因此我不确定运行多个重新编制索引任务是否是一个好主意,因为它会在整个过程中降低平台的速度?我会等一两天其他人也回答,但如果没有其他人回答,我会接受你的回答。当然。很抱歉,如果我的解释不是crystal,那么您应该只在增量更新时使用调度程序,而不是在完全更新时使用调度程序