ElasticSearch分頁查詢

和 SQL 使用 LIMIT 關(guān)鍵字返回單個(gè) page 結(jié)果的方法相同,Elasticsearch 接受 fromsize 參數(shù):

size

顯示應(yīng)該返回的結(jié)果數(shù)量,默認(rèn)是 10 之前是20

from

顯示應(yīng)該跳過的初始結(jié)果數(shù)量,默認(rèn)是 0

語法

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

考慮到分頁過深以及一次請求太多結(jié)果的情況,結(jié)果集在返回之前先進(jìn)行排序。 但請記住一個(gè)請求經(jīng)??缭蕉鄠€(gè)分片,每個(gè)分片都產(chǎn)生自己的排序結(jié)果,這些結(jié)果需要進(jìn)行集中排序以保證整體順序是正確的。

在分布式系統(tǒng)中深度分頁

理解為什么深度分頁是有問題的,我們可以假設(shè)在一個(gè)有 5 個(gè)主分片的索引中搜索。 當(dāng)我們請求結(jié)果的第一頁(結(jié)果從 1 到 10 ),每一個(gè)分片產(chǎn)生前 10 的結(jié)果,并且返回給 協(xié)調(diào)節(jié)點(diǎn) ,協(xié)調(diào)節(jié)點(diǎn)對(duì) 50 個(gè)結(jié)果排序得到全部結(jié)果的前 10 個(gè)。

現(xiàn)在假設(shè)我們請求第 1000 頁—結(jié)果從 10001 到 10010 。所有都以相同的方式工作除了每個(gè)分片不得不產(chǎn)生前10010個(gè)結(jié)果以外。 然后協(xié)調(diào)節(jié)點(diǎn)對(duì)全部 50050 個(gè)結(jié)果排序最后丟棄掉這些結(jié)果中的 50040 個(gè)結(jié)果。

可以看到,在分布式系統(tǒng)中,對(duì)結(jié)果排序的成本隨分頁的深度成指數(shù)上升。這就是 web 搜索引擎對(duì)任何查詢都不要返回超過 1000 個(gè)結(jié)果的原因。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容