過濾緩存
elasticsearch容許咱們把某些字段的值加入到字段數據緩存中,這是灰常有用的,特別是在作基於字段排序或者聚合時。
elasticsearch支持兩種類型三種形式的字段數據過濾,基於詞頻,基於正則以及基於二者結合的形式。
添加字段數據過濾信息格式以下
"tag":{
"type": "string",
"index": "not_analyzed",
"fielddata": {
"filter": {}
}
}正則表達式
1.基於詞頻過濾
基於詞頻過濾是指那些只加載頻率高於指定頻率的最小值min且低於指定頻率的最大值max.詞項的頻率是針對索引段的並不是是針對索引的,
同一個詞項在索引段級和索引級是不同的。
min和max能夠爲一個百分比也能夠爲具體的特定值
以下:
min:20%等同於min:0.2
min:10
除此以外還包含此屬性min_segment_size表示爲在構建字段數據緩存時,此索引段中最少包含的
文檔個數.小於此個數的索引段不會被考慮
以下:
min_segment_size:100
表示此索引段中至少不小於100個文檔個數api
保存詞頻在0.01到0.2之間且此索引段中文檔個數很多於100的字段映射緩存
{
"book": {
"properties": {
"tag": {
"type": "string",
"index": "not_analyzed",
"fielddata": {
"filter": {
"frequcency": {
"min": 0.01,
"max": 0.2,
"min_segment_size":100
}
}
}
}
}
}
}
2.基於正則表達式過濾
基於正則表達式過濾只有匹配特定表達式的詞項會加載到字段數據緩存中
{
"book": {
"properties": {
"tag": {
"type": "string",
"index": "not_analyzed",
"fielddata": {
"filter": {
"regex": "^#.*"
}
}
}
}
}
}
3.基於詞頻和正則表達式過濾
{
"book": {
"properties": {
"tag": {
"type": "string",
"index": "not_analyzed",
"fielddata": {
"filter": {
"frequcency": {
"min": 0.01,
"max": 0.2,
"min_segment_size":100
},
"regex": "^#.*"
}
}
}
}
}
}
字段數據緩存雖然不是在創建索引時構建的,可是咱們能夠在查詢期間重建,能夠在運行時改變過濾行爲能夠經過api來改變fielddata配置節點來實現elasticsearch