segments&cache
Segments
執行效果
命令 在 sense 里邊執行 GET /abcd/_segments 前邊的是索引名稱,后邊是請求 段信息
說明 索引是面向分片的,是由于索引是由一個或多個分片(以及它的副本)構成,每個分片就是一個物理上的Lucene索引
返回
名詞解釋
已提交索引段:指那些已經執行了提交命令的段,意味著已經提交到磁盤持久化并且是只讀的;
可查詢索引段:可供查詢使用的索引段;
索引的代:告訴我們索引有多“老”,起初創建的索引段的代為0,接著是1,依次繼續;
被標記為已刪除的索引數:這些文檔會在索引段合并的過程中被刪除;
Cache
分類
過濾器緩存
字段數據緩存
哪些場景會使用到緩存
父子索引
切面
基于索引字段的高效排序
過濾器緩存
索引級過濾器緩存
index.cache.filter.type:類型 resident,soft,weak或node(默認值)
index.cache.filter.max_size:存儲到緩存中的最大紀錄數,默認為-1,應用于指定索引的某個分片的某個索引段上;
index.cache.filter.expire:指定過濾器緩存中記錄的過期時間,默認為-1,60m代表60分鐘;
節點級別過濾器緩存
應用于給定節點的所有分片,可以利用下邊的參數設置緩存的大小:
indices.cache.filter.size:可以使用百分數 1% 占用當前最大堆內存的百分比,也可以設置數字 如 1024mb
移除策略:LRU
字段數據緩存
說明
字段數據緩存在我們涉及到 切面計算 或 基于字段數據排序使用
做法:加載相關字段的全部數據到內存中。
配置
index.fielddata.cache.type:同上
index.fielddata.cache.size:同上
index.fielddata.cache.expire:同上
過濾
上邊的索引尤其是字段索引都是es的默認機制,將 切面計算的字段和排序的字段做的默認的fielddata索引,
現在我們選擇性的將一些字段數據緩存做一個定制化
這樣做的好處是:將一些低頻詞項甚至是錯誤的詞從字段緩存中刪除,降低字段緩存的總量;
基于詞頻和正則表達式過濾
只加載那些詞頻高于指定最小值且低于指定最大值的詞項,詞項的范圍是針對索引段的。
1 {
2 ...
3 properties:{
4 "field":{
5 "type":"string",
6 "index":"not_anlyzed",
7 "fielddata":{
8 "filter":{
9 "frequency":{
10 "min":0.01, 詞項出現頻率大于1%
11 "max":0.4, 詞項出現頻率小于40%
12 "min_segment_size":100 該索引段至少要有100個文檔
13 },
14 “regex”:"^#.*" 詞項必須以#開頭
15 }
16 }
17 }
18 }
19 }
20
21 只有符合以上過濾條件的 詞項 才會被緩存
清除緩存
清除全部緩存 _cache/clear
清除指定緩存 index/_cache/clear
清除指定類型緩存 index/_cache/clear?filter=true&field_data=false&bloom=true 清除索引的filter緩存和bloom緩存,保留fielddata字段數據緩存
清除指定字段緩存 index/_cache/clear?fields=title,price 清除字段為field和price的全部緩存
問題
filtercache是如何存儲和獲取的?
fielddatacache是如何存儲和獲取的?
segments的創建和merge機制是怎樣的?
總結
以上是生活随笔為你收集整理的segments&cache的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux格式化硬盘 常用命令小记
- 下一篇: C++ 设置光标问题