[Toc]
1、分頁搜索
語法
#搜索第1000頁的10條數(shù)據(jù)
GET /test_index/test_type/_search?from=10000&size=10
2征懈、什么是deep paging?
簡單來說,就是分頁搜索的特別深揩悄。比如有個(gè)index有3個(gè)primary shard受裹,共60000條數(shù)據(jù),每個(gè)shard上分了20000條數(shù)據(jù)÷彩現(xiàn)在要進(jìn)行分頁查詢?nèi)〉?000頁的10條數(shù)據(jù)棉饶。整個(gè)過程是這樣的
(1) 分頁查詢請(qǐng)求打到協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)將搜索請(qǐng)求轉(zhuǎn)發(fā)到index的3個(gè)shard所在的node上去
(2) 取出每個(gè)node上的第1~10010條數(shù)據(jù)返回給協(xié)調(diào)節(jié)點(diǎn)镇匀,協(xié)調(diào)節(jié)點(diǎn)一共拿到30030條數(shù)據(jù)
(3) 協(xié)調(diào)節(jié)點(diǎn)對(duì)這30030條數(shù)據(jù)進(jìn)行排序照藻,根據(jù)_score(相關(guān)度分?jǐn)?shù))取到排名最前的10條數(shù)據(jù),就是我們要的最終的的第1000頁的10條數(shù)據(jù)
3汗侵、deep paging性能問題
從上圖可以看到幸缕,搜索的過深的時(shí)候群发,就需要在協(xié)調(diào)節(jié)點(diǎn)上保存大量的數(shù)據(jù),還要進(jìn)行大量數(shù)據(jù)的排序发乔,排序之后熟妓,再取出對(duì)應(yīng)的那一頁。所以這個(gè)過程栏尚,即耗費(fèi)網(wǎng)絡(luò)帶寬起愈,耗費(fèi)內(nèi)存,還耗費(fèi)cpu译仗。所以deep paging會(huì)出現(xiàn)性能問題抬虽。我們應(yīng)該盡量避免出現(xiàn)這種deep paging操作。