1 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
ES分頁方案
守則:
禁止使用From/Size
獲取排序數(shù)據(jù)采用search_after方法,每次只返回排序數(shù)據(jù),不返回其他數(shù)據(jù),排序數(shù)據(jù)保存在ES中
分頁搜索采用search_after方法,根據(jù)ES排序索引設(shè)置搜索起點(diǎn),每次返回所有數(shù)據(jù)
優(yōu)點(diǎn): 訪問速度最快,理論上是單頁訪問時(shí)間秒級,對ES壓力小
缺點(diǎn):需要單獨(dú)一個(gè)線程維護(hù)排序數(shù)據(jù)數(shù)組,且由于進(jìn)行排序的索引中ES數(shù)據(jù)可能被刪除,而ES排序索引的數(shù)據(jù)還未更新,訪問數(shù)據(jù)有較低概率出現(xiàn)單頁某條數(shù)據(jù)被新數(shù)據(jù)擠出分頁界面的概率,有較低概率會出現(xiàn)前一頁的最后一條數(shù)據(jù)出現(xiàn)在本頁,本頁的最后一條數(shù)據(jù)出現(xiàn)在下一頁的情況。
具體實(shí)施細(xì)節(jié):程序一開始就會在ES中創(chuàng)建一個(gè)排序索引,然后采用search_after算法,不斷計(jì)算要進(jìn)行分頁的索引的排序數(shù)據(jù),保存在ES中,此程序是循環(huán)進(jìn)行。然后要訪問的時(shí)候只需要讀取分頁索引和對應(yīng)的分頁排序索引的值,就可以得出對應(yīng)頁的數(shù)據(jù)。
Restful過程介紹:
獲取排序數(shù)據(jù)的Restful語句
第一頁:
GET test_delete/_search
{
"size":15,"sort":[ {"randomDouble":"DESC"}, {"randomInt": "DESC"}, {"phone":"DESC"} ],"_source": "{}"
}
獲得最后一項(xiàng)排序數(shù)據(jù)
第N頁:
GET test_delete/_search
{
"size":15,"sort":[ {"randomDouble":"DESC"}, {"randomInt": "DESC"}, {"phone":"DESC"} ],"search_after":[ 排序數(shù)據(jù) ],"_source": "{}"
}
這個(gè)過程開一個(gè)線程,不斷循環(huán)更新排序數(shù)據(jù)
獲取對應(yīng)頁數(shù)據(jù)的Restful語句
第一頁:
GET test_delete/_search
{
"size":15,"sort":[ {"randomDouble":"DESC"}, {"randomInt": "DESC"}, {"phone":"DESC"} ]
}
第N頁:
GET test_delete/_search
{
"size":15,"sort":[ {"randomDouble":"DESC"}, {"randomInt": "DESC"}, {"phone":"DESC"} ],"search_after":[ 排序數(shù)據(jù) ],
}
對比獲取排序數(shù)據(jù),該restful語句刪除"_source": "{}",以此來獲得該頁所有數(shù)據(jù)
添加回答
舉報(bào)