从工人

时间:2015-05-14 19:27:09

标签: elasticsearch nest ironworker

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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