2013-03-14 23 views
4

掃描ElasticSearch索引時,不可能根據documentation應用任何排序。 但是在這個過程中,是否有任何關於結果順序的定義?如果是,是否可以預測?掃描/滾動彈性搜索索引時是否有可預測的順序?

背景信息:

我需要做5M的文件操作regulary的1.000文檔每批取約1分鐘進行處理。由於我無法確定每次運行過程都會完成,因此我希望能夠在上次中斷它的工作時繼續工作,例如,如果滾動結果按ID排序(我知道,事實並非如此),我會跟蹤我的代碼中最後一次處理的ID,並且在下一次運行時不再處理任何帶有ID <= lastProcessedId的文檔,以確保每個文檔定期處理。

順便說一句:通過「處理文檔」我並不是要寫額外的信息回索引,而是更新我的數據庫中的其他東西。將時間戳寫入索引文檔對我來說無濟於事,因爲進程被中斷的原因之一可能是索引被替換爲新索引(從頭開始重新構建)。 寫處理過的時間戳到數據庫對我來說也不是一個理想的選項,因爲迭代性能是我使用索引在第一個位置滾動的原因....

回答

4

不,排序順序是不可預測。我打算建議使用時間戳,但後來我讀了你的問題的其餘部分:)

真的,使掃描搜索「可恢復」的唯一方法是在一些字段中將文檔分爲多個分檔,例如時間戳或ID,並使用範圍查詢一次只滾動一個檔案。

+0

感謝您對此的輸入...我可能會恢復到遍歷數據庫,因爲迭代索引(超快速迭代)的主要好處將不再適用於進行範圍查詢.... – peterp 2013-03-25 16:43:53