Elasticsearch 三種快取介紹

2021-09-19 22:11:02 字數 1086 閱讀 2385

**:

filter cache(query cache):

query cache也稱為filter cache,顧名思義它的作用就是對乙個查詢中包含的過濾器執行結果進行快取。

比如我們常用的term,terms,range過濾器都會在滿足某種條件後被快取,注意,這裡的bool過濾器是不會被快取的,但bool過濾器包含的子query clause會被快取,我們可以用下面的命令來查詢query cache的情況。

request cache(shard query cache)

當乙個查詢傳送到es集群的某個節點上時,這個節點會把該查詢擴散到其他節點並在相應分片上執行,我們姑且把在分片上執行的結果叫「本地結果集「,這些本地結果集最終會匯集到最初請求到達的那個協調節點,這些「分片級」的結果集會合併成「全域性」結果集返回給呼叫端。

request cache模組就是為了快取這些「分片級」的本地結果集,但是目前只會快取查詢中引數size=0的請求,所以就不會快取hits 而是快取 hits.total,aggregations和suggestions

fielddata

一談到fielddata我們不得不提到doc_values,這兩者的作用都是一樣:能夠讓我們在inverted index(倒排索引)的基礎之上做aggregation、sort或者在查詢中通過script訪問doc屬性,這裡我們不討論doc_values,主要講下fielddata,doc values相關知識請戳:

想必大家都知道倒排索引這種結構,如果我們僅僅依靠倒排是很難在查詢中做到排序和統計的,因為它並不是像關係型資料庫那樣採用「列式儲存」,而是基於乙個「詞」到「文件」的倒排。

載入fielddata cache是乙個非常昂貴的操作,一旦fielddata被載入到記憶體,那麼在該fielddata cache對應的segement生命週期範圍內都會駐留在記憶體中。也就是說當段合併時會觸發合併後更大段的fielddata cache載入。

fielddata會消耗大部分的jvm堆記憶體,特別是當載入「高基數」的分詞欄位時(那些分詞後存在大量不同詞的字段),針對這種欄位的聚合排序其實是非常沒有意義的,我們更多的要去考慮是否能用not_analyzed代替(這樣就可以使用doc_values實現聚合、排序)。

Elasticsearch 三種分頁方式

淺 分頁可以理解為簡單意義上的分頁。它的原理很簡單,就是查詢前20條資料,然後截斷前10條,只返回10 20的資料。這樣其實白白浪費了前10條的查詢。get test dev search size 10,from 20,sort id 其中,from定義了目標資料的偏移值,size定義當前返回的數...

整理 Elasticsearch 三種分頁方式

目錄 1 from size 淺分頁 from size的原理 2 scroll 深分頁 scroll原理 3 search after 深分頁 search after的原理 淺 分頁可以理解為簡單意義上的分頁。它的原理很簡單,就是查詢前20條資料,然後截斷前10條,只返回10 20的資料。這樣其...

程序 三種型別,三種狀態

一 程序的概念 程序是執行乙個程式時所分配的資源,資源包括占用的cpu,記憶體等,是乙個動態執行過程。二 程序的組成 正文段使用者資料段 系統資料段 程序控制塊 pcb cpu暫存器值 堆疊 三 程序控制塊pcb 程序控制塊是系統用來控制和管理程序,獲得程序狀態和程序存在特徵的唯一標識。包括 程序標...