"淺"分頁可以理解為簡單意義上的分頁。它的原理很簡單,就是查詢前20條資料,然後截斷前10條,只返回10-20的資料。這樣其實白白浪費了前10條的查詢。
get test_dev/_search}]}},
"size": 10,
"from": 20,
"sort": [
,"_id":
}]}
其中,from定義了目標資料的偏移值,size定義當前返回的數目。預設from為0,size為10,即所有的查詢預設僅僅返回前10條資料。
在這裡有必要了解一下from/size的原理:
因為es是基於分片的,假設有5個分片,from=100,size=10。則會根據排序規則從5個分片中各取回100條資料資料,然後彙總成500條資料後選擇最後面的10條資料。
做過測試,越往後的分頁,執行的效率越低。總體上會隨著from的增加,消耗時間也會增加。而且資料量越大,就越明顯!
from+size查詢在10000-50000條資料(1000到5000頁)以內的時候還是可以的,但是如果資料過多的話,就會出現深分頁問題。
get test_dev/_search?scroll=5m}]}},
"size": 10,
"from": 0,
"sort": [
,"_id":
}]}
scroll=5m表示設定scroll_id保留5分鐘可用。
使用scroll必須要將from設定為0。
size決定後面每次呼叫_search搜尋返回的數量
get _search/scroll
注意:請求的介面不再使用索引名了,而是 _search/scroll,其中get和post方法都可以使用。
scroll刪除
根據官方文件的說法,scroll的搜尋上下文會在scroll的保留時間截止後自動清除,但是我們知道scroll是非常消耗資源的,所以乙個建議就是當不需要了scroll資料的時候,盡可能快的把scroll_id顯式刪除掉。
清除指定的scroll_id:
delete _search/scroll/dnf1zxj5vghlbkzldgno.....
清除所有的scroll:
delete _search/scroll/_all
scroll 的方式,官方的建議不用於實時的請求(一般用於資料匯出),因為每乙個 scroll_id 不僅會占用大量的資源,而且會生成歷史快照,對於資料的變更不會反映到快照上。
為了找到每一頁最後一條資料,每個文件必須有乙個全域性唯一值,官方推薦使用 _uid 作為全域性唯一值,其實使用業務層的 id 也可以。
get test_dev/_search}]}},
"size": 20,
"from": 0,
"sort": [
,"_id":
}]}
使用search_after必須要設定from=0。
這裡我使用timestamp和_id作為唯一值排序。
我們在返回的最後一條資料裡拿到sort屬性的值傳入到search_after。
get test_dev/_search}]}},
"size": 10,
"from": 0,
"search_after": [
1541495312521,
"d0xh6gybbtbwbqsp0j1a"],
"sort": [
,"_id":
}]}
Elasticsearch 三種快取介紹
filter cache query cache query cache也稱為filter cache,顧名思義它的作用就是對乙個查詢中包含的過濾器執行結果進行快取。比如我們常用的term,terms,range過濾器都會在滿足某種條件後被快取,注意,這裡的bool過濾器是不會被快取的,但bool過...
整理 Elasticsearch 三種分頁方式
目錄 1 from size 淺分頁 from size的原理 2 scroll 深分頁 scroll原理 3 search after 深分頁 search after的原理 淺 分頁可以理解為簡單意義上的分頁。它的原理很簡單,就是查詢前20條資料,然後截斷前10條,只返回10 20的資料。這樣其...
程序 三種型別,三種狀態
一 程序的概念 程序是執行乙個程式時所分配的資源,資源包括占用的cpu,記憶體等,是乙個動態執行過程。二 程序的組成 正文段使用者資料段 系統資料段 程序控制塊 pcb cpu暫存器值 堆疊 三 程序控制塊pcb 程序控制塊是系統用來控制和管理程序,獲得程序狀態和程序存在特徵的唯一標識。包括 程序標...