ElasticSearch分頁查詢

和 SQL 使用 LIMIT 關鍵字返回單個 page 結果的方法相同,Elasticsearch 接受 fromsize 參數:

size

顯示應該返回的結果數量,默認是 10 之前是20

from

顯示應該跳過的初始結果數量,默認是 0

語法

GET /_search?size=5
GET /_search?size=5&from=2

考慮到分頁過深以及一次請求太多結果的情況,結果集在返回之前先進行排序。 但請記住一個請求經常跨越多個分片,每個分片都產生自己的排序結果,這些結果需要進行集中排序以保證整體順序是正確的。

在分佈式系統中深度分頁

理解爲什麼深度分頁是有問題的,我們可以假設在一個有 5 個主分片的索引中搜索。 當我們請求結果的第一頁(結果從 1 到 10 ),每一個分片產生前 10 的結果,並且返回給 協調節點 ,協調節點對 50 個結果排序得到全部結果的前 10 個。

現在假設我們請求第 1000 頁—結果從 10001 到 10010 。所有都以相同的方式工作除了每個分片不得不產生前10010個結果以外。 然後協調節點對全部 50050 個結果排序最後丟棄掉這些結果中的 50040 個結果。

可以看到,在分佈式系統中,對結果排序的成本隨分頁的深度成指數上升。這就是 web 搜索引擎對任何查詢都不要返回超過 1000 個結果的原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章