4

扫描 ElasticSearch 索引时,无法根据文档应用任何排序。但是在这个过程中,结果的顺序是否有任何定义?如果是,是否可以预测?

背景资料:

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

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

4

1 回答 1

4

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

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

于 2013-03-15T10:47:56.167 回答