elasticsearch 弹性搜索重新索引竞赛条件
您好elasticsearch用户/专家 我在理解Elasticsearch的reindex api的竞争条件问题时有点困难,我想听听是否有人找到了解决方案 我搜索了很多地方,没有找到任何清晰的解决方案(大多数解决方案都可以追溯到reindex api之前) 您可能知道,(现在)对文档重新编制索引的标准方法(例如,在更改映射之后)是使用别名。 假设别名指向“old_index”。然后,我们使用新映射创建一个名为“new_index”的新索引,调用reindex api将文档从“old_index”重新索引为“new_index”,然后切换别名以指向新的_索引(并删除指向old_index的别名指针)。这似乎是重新编制索引的标准方法,这是我在最近访问的几乎所有网站上看到的 对于使用此方法,我的问题如下,虽然我不希望停机(因此用户仍然可以搜索文档),但我仍然希望能够在重新索引过程中将文档注入ElasticSearch:elasticsearch 弹性搜索重新索引竞赛条件,elasticsearch,kibana,elasticsearch,Kibana,您好elasticsearch用户/专家 我在理解Elasticsearch的reindex api的竞争条件问题时有点困难,我想听听是否有人找到了解决方案 我搜索了很多地方,没有找到任何清晰的解决方案(大多数解决方案都可以追溯到reindex api之前) 您可能知道,(现在)对文档重新编制索引的标准方法(例如,在更改映射之后)是使用别名。 假设别名指向“old_index”。然后,我们使用新映射创建一个名为“new_index”的新索引,调用reindex api将文档从“old_index
提前谢谢 如果太冗长,我道歉,但我的两分钱: 重新编制索引过程正在进行时,文档是否仍将传入 工作(这可能需要很多时间),你会怎么做 重新编制索引过程确保文档将在 旧索引(以便在重新索引过程中能够搜索它) 工作)但仍将正确地重新索引到新索引 当从源到目标重新编制索引时,别名将(并且必须)仍然指向
源索引。对该索引的所有修改/更改均以独立方式进行,这些更新/删除应立即生效
假设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,那么您应该只在增量更新时使用调度程序,而不是在完全更新时使用调度程序