elasticsearch 正排索引

2022-06-23 04:27:13 字數 960 閱讀 5437

倒排索引是我們所熟知的,正排索引是什麼,es還用到這個?當我們在很多資料中查詢某些內容時,倒排索引會乙個乙個的去遍歷完所有的倒排索引「表」然後再分組聚合,但是也許在前面的搜尋中以及找到了我們想要的結果只是倒排索引不知道,這樣顯示不是很好,為了應對這種情況,正排索引閃亮登場!

正排索引:

doc value  的資料結構,核心原理同倒排索引,寫入磁碟檔案、os cache進行快取(提公升服務正排索引的效能),如果os cache不夠用了就將其中的資料寫入磁碟檔案

關於效能優化問題有很多方案,這裡jvm更少的記憶體

es基於os cache進行快取、提公升效能,不是很建議使用jvm記憶體進行快取(導致gc開銷、oom問題),所以給jvm更少的記憶體,給os cache更大的記憶體,這樣可以提公升正排索引和倒排索引的快取及查詢效率。

colum壓縮

1、相同的value:合併、保留乙個標識

所有的值相同,保留乙個值、小於256個值,使用table encoding模式、大於256個值如有公約數即除以最大公約數並保留 沒有則用offset結合壓縮

禁用:不需要正排索引,禁用減少磁碟空間的占用

put my_index}}

}}

對於分詞的field進行聚合(aggregation)操作,需要將fielddata設定為true,否則會報錯提示你開啟fielddata、將正排索引載入到記憶體中

不分詞的field會在index-time時生成正排索引,這樣聚合時直接使用正排索引

而分詞的field在建立索引時是沒有正排索引的(doc  value)直接聚合報錯,需要開啟fielddata,然後es在執行聚合時現場建立正排索引,將fielddata正排索引載入到記憶體,基於記憶體的正排索引執行分詞field的聚合操作,可以看出這樣會耗費記憶體空間,那為什麼要占用大量記憶體吶?分詞的字串需要安裝term進行聚合,進而執行複雜的演算法和操作,如果基於磁碟和os cache的話效能會比較差,顯然效能和記憶體選擇了效能。

搜尋之正排索引

正排索引,也叫前向索引,和倒排索引 也叫反向索引 是相對的,正排索引相對倒排來說簡單多了,第二篇文章的時候有下面兩個 表1和表2 這個是表1 文件編號 文件內容 1這是乙個go語言實現的搜尋引擎 2php是世界上最好的語言 3linux是c語言和組合語言實現的 4谷歌是乙個世界上最好的搜尋引擎公司 ...

c c 雙鏈表正排序

include include include struct list typedef struct list node typedef node link link front null,rear,ptr,head null link push int item else return head ...

c c 雙鏈表正排序

源於 http blog.csdn.net mobidogs archive 2008 11 30 3414624.aspx include include include struct list typedef struct list node typedef node link link fro...