【发布时间】:2018-03-22 22:21:26
【问题描述】:
假设我有一个长时间运行的更新查询,我将大约 200k 更新到 500k,甚至可能更多。为什么我需要更新这么多文档超出了问题的范围。
由于客户端超时(我使用的是官方的ES python客户端),我希望有一种方法可以检查批量更新请求的状态,而不必使用巨大的超时值。
对于一个简短的请求,可以使用请求的响应,有没有办法我也可以获得请求的响应,或者我是否可以为请求指定 name 或 id 以便稍后参考。
对于正在运行的请求:我可以使用tasks API 来获取信息。
但是对于其他状态 - 完成/失败,我该如何获得它。
如果我尝试访问已经完成的任务,我会得到 resource not found 。
附:我正在使用update_by_query 进行更新
【问题讨论】:
-
是否有充分的理由不将您的查询分成几块?你仍然可以使用批量 API,也许只是将它们分成 500 个块。
-
是的。所以这是一个 update_by_query 请求,我想更新所有具有此属性特定值的文档的属性。例如。每个将
company_name设为“flipkart”的文档都将其更新为“flipkart group” -
您是否使用带有 _update_by_query 的切片滚动,这会并行化此操作?您还可以增加请求超时值。
-
是的,我也在使用切片(设置为大约 80% 的分片数量)并且也可以增加超时。但是,就像我在问题中提到的那样,我想避免这样做,并在以后知道查询是否成功。如果不支持开箱即用,是否有我可以使用的方法或实现来做到这一点。
-
您可以使用任务 api 来做到这一点 elastic.co/guide/en/elasticsearch/reference/current/… 但先测试它。当我尝试它并在 update_by_query 操作完成之前获得状态时,它破坏了我的数据
标签: elasticsearch nosql elasticsearch-5