1

目前,我必须更新在 elasticsearch 中索引的超过 100 万个文档中的一个字段。这是一项复杂的任务,因为该字段包含从 XML 文件生成的元数据,用于评估 xpath 表达式。我们必须遍历索引中的所有文档并更新该字段。因此,为了避免系统过度杀伤,我们决定使用 Ironworker 平台。
我已经阅读了几篇关于如何在 elasticsearch 中更新数百万个文档的文章,例如这篇文章,但是鉴于我们将使用 Ironworkers,因此存在一些限制,例如一项任务只能运行 60 分钟。

问题: 考虑到 60 分钟的限制,我如何遍历所有文档并更新其字段。
我想打开并滚动并将scroll_id传递给下一个工作人员,但我不知道执行下一个任务需要多长时间,所以滚动可能会过期,我将不得不重新开始。

4

1 回答 1

1

根据您的描述,您可以将 IronWorker 任务链接在一起,这实际上非常简单。如果您对更新单个项目需要多长时间有所了解,那么您可以推断出您需要多长时间。假设更新一个项目需要 100 毫秒,那么您可以每秒执行 10 次,或每分钟 600 次,所以可能执行 6000 次(大约需要 10 分钟),然后从您的代码中排队下一个。排队下一个任务就像排队第一个任务一样简单:http: //dev.iron.io/worker/reference/api/#queue_a_task(也可以使用您的语言的客户端库)。

或者只是在 X 分钟后停止并排队下一个工人。

或者,如果你想让事情变得更快,那么同时排队 26 个怎么样,每个字母对应一个?每个人都可以查询以分配给它的字母开头的所有项目(前缀查询)。

有很多方法可以解决这个问题。

于 2015-05-19T03:05:31.690 回答