扫描/滚动弹性搜索索引时是否有可预测的顺序?

pet*_*erp 5 scroll elasticsearch database-scan

扫描 ElasticSearch 索引时,不可能根据文档应用任何排序。但是这个过程中结果的顺序有什么定义吗?如果是的话,是可以预测的吗?

背景资料:

我需要定期对 5M 个文档进行操作,每批 1000 个文档大约需要 1 分钟处理时间。由于我无法确保每次运行该过程都会完成,因此我想让它在上次中断的地方继续工作,例如,如果滚动结果按ID(我知道,它是不),我会跟踪ID代码中最后处理的内容,并且在下一次运行时不再使用 处理任何文档ID <= lastProcessedId,以确保每个文档都得到定期处理。

顺便说一句:“处理文档”并不是指将附加信息写回索引,而是更新数据库中的其他一些内容。在我的情况下,向索引文档写入时间戳不会有帮助,因为进程中断的原因之一可能是索引被替换为新索引(从头开始重新构建)。将处理后的时间戳写入数据库对我来说也不是一个理想的选择,因为迭代性能是我首先使用索引滚动的原因......

DrT*_*ech 4

不,排序顺序是不可预测的。我本来打算建议使用时间戳,但后来我读了你问题的其余部分:)

实际上,使扫描搜索“可恢复”的唯一方法是将文档按某个字段(例如时间戳或 ID)划分为多个部分,并使用范围查询一次只滚动一个部分。