扫描ElasticSearch索引时,无法根据documentation应用任何排序。 但在此过程中,结果的顺序是否有任何定义?如果是,是否可以预测?
背景资料:
我需要定期对5M文档进行操作,每批1.000文档需要大约1分钟进行处理。因为我不能确保每次运行都会完成这个过程,所以我很乐意让它在上次中断的过程中完成它的工作,例如如果滚动结果按ID
排序(我知道,它不是),我会跟踪代码中最后处理的ID
,并且下次运行时不再处理任何文档ID <= lastProcessedId
,以确保定期处理每个文档。
顺便说一句:通过“处理文档”我并不是要将其他信息写回索引,而是更新我的数据库中的其他内容。在我的情况下,将时间戳写入索引文档将无济于事,因为进程被中断的原因之一可能是索引被替换为新索引(从头开始重新构建)。 将处理后的时间戳写入数据库也不是我想要的选项,因为迭代性能是我使用索引首先滚动的原因....
答案 0 :(得分:4)
不,排序顺序不可预测。我打算建议使用时间戳,但后来我读了你的其余问题:)
实际上,使扫描搜索“可恢复”的唯一方法是将文档划分为某些字段(例如时间戳或ID)的部分,并使用范围查询一次只滚动一个部分。