10 es 高階用法

2021-10-06 23:28:22 字數 4793 閱讀 9443

一、term vector

1、term vector :獲取document中的某個field內的各個term的統計資訊

term information: term frequency in the field, term positions, start and end offsets, term payloads

term statistics: 設定term_statistics=true; total term frequency, 乙個term在所有document**現的頻率; document frequency,有多少document包含這個term

field statistics: document count,有多少document包含這個field; sum of document frequency,乙個field中所有term的df之和; sum of total term frequency,乙個field中的所有term的tf之和

2、index-time & query-time

"store" : true,

"analyzer" : "fulltext_analyzer"

},"fullname": }}

},"settings" : ,

"analysis": }}

}}3、實驗

(1)存入資料

put /my_index/my_type/1

put /my_index/my_type/2

(2)檢視term資訊

get /my_index/my_type/1/_termvectors------------>檢視某個field下term的統計資訊

(3)查詢結果說明

,"terms": ]},

"test": ,,]

}}}}

}4、手動指定doc的term vector---->手動指定要探查的term的資料情況,計算它在現有的所有doc中的一些統計資訊

get /my_index/my_type/_termvectors

,"fields" : ["text"],

"offsets" : true,

"payloads" : true,

"positions" : true,

"term_statistics" : true,

"field_statistics" : true

}5、multi term vector

get _mtermvectors,]

}二、highlight

1、highlight中的field,必須跟query中的field一一對齊的

2、例如:

分詞器測試:

get _analyze

get /blog_website/blogs/_search 

},"highlight": }}

}3、三種highlight

(1)、plain highlight 預設值

(2)、posting highlight

效能比plain highlight要高,因為不需要重新對高亮文字進行分詞

對磁碟的消耗更少

將文字切割為句子,並且對句子進行高亮,效果更好}}

}}}(3)、fast vector highlight

對大field而言(大於1mb),效能更高}}

}}}4、強制使用某種highlight

get /blog_website/blogs/_search 

},"highlight": }}

}5、總結

般情況下,用plain highlight也就足夠了,不需要做其他額外的設定

如果對高亮的效能要求很高,可以嘗試啟用posting highlight

如果field的值特別大,超過了1m,那麼可以用fast vector highlight

三、template

1、說明

2、例1:入門

get /blog_website/blogs/_search/template

}" : "}" --------->這個就是template} }

},"params" :

}底層翻譯為:

get /blog_website/blogs/_search }

}3、例2:tojson

2、tojson

get /blog_website/blogs/_search/template

}matchcondition}}}",---->將json物件生成json串

"params": }}

底層翻譯為:

get /blog_website/blogs/_search }

}4、例3:join

get /blog_website/blogs/_search/template

}titles}"}}

},"params":

}底層翻譯為:

get /blog_website/blogs/_search }

}5、例4:default value

get /blog_website/blogs/_search/template

}","lte": "}}20}"--------->預設值是20}}

}},"params":

}6、例5:conditional

es的config/scripts目錄下,預先儲存這個複雜的模板,字尾名是.mustache,檔名是conditonal

}" }

},"filter": } ------------------>條件中指定了line_no,才使用

"range": } 

"gte": "}" 

},} 

} } 

"lte": "}" } }

}} }}

}}get /my_index/my_type/_search/template

}7、使用場景:

比如說,一般在大型的團隊中,可能不同的人,都會想要執行一些類似的搜尋操作

這個時候,有一些負責底層運維的一些同學,就可以基於search template,封裝一些模板出來,然後是放在各個es程序的scripts目錄下的

其他的團隊,其實就不用各個團隊自己反覆手寫複雜的通用的查詢語句了,直接呼叫某個搜尋模板,傳入一些引數就好了

四、completion suggest

1、suggest,completion suggest,自動完成,搜尋推薦,搜尋提示 --> 自動完成,auto completion

2、completion 型別:es實現的時候,是非常高效能的,會構建不是倒排索引,也不是正拍索引,就是純的用於進行字首搜尋的一種特殊的資料結構,而且會全部放在記憶體中,所以auto completion進行的字首搜尋提示,效能是非常高的

"analyzer": "ik_max_word"}}

},"content": }}

}}搜尋:get /news_website/news/_search}}

}1、es會自動對映

put /my_index/my_type/1

3、根據field-type匹配對映模板

test_number,如果是個數字,我們希望預設就是integer型別的

test_string,如果是字串,我們希望預設是個text,這個沒問題,但是內建的field名字,叫做raw,不叫座keyword,型別還是keyword,保留500個字元

4、根據field-name匹配對映模板

六、geo_poing 地理位置資料型別

geo_point,就是乙個地理位置座標點,包含了乙個經度,乙個維度,經緯度,就可以唯一定位乙個地球上的座標}}

}}}2、寫入geo_point的3種方法

put my_index/my_type/1

}put my_index/my_type/2

put my_index/my_type/4

3、geo_bounding_box查詢:查詢某個矩形內的座標

get /my_index/my_type/_search 

,"bottom_right": }}

}}七、geo_poing案例

1、背景:指定兩個地點,就要在東方明珠大廈和上海路組成的矩陣的範圍內,搜尋我想要的酒店

2、geo_bounding_box-------->矩形範圍內搜尋

"pin.location": ,

"bottom_right" : }}

}}}}

3、geo_polygon-------->多邊形範圍內搜尋

"pin.location": ,,]

}}}}

}}4、geo_distance-------->搜尋當前位置,方圓範圍內的資料

"distance": "200km",

"pin.location": }}

}}}5、基於地理位置進行聚合分析

舉例我0~100m有幾個酒店,100m~300m有幾個酒店,300m以上有幾個酒店

"lat": 40,

"lon": -70

},"distance_type": "sloppy_arc"--->sloppy_arc (the default), arc (most accurate) and plane (fastest)

"unit": "mi", 

"ranges": [,,

]}}}

}

(10)ES使用mge和bulk批量操作

課程大綱 1mget 1 批量查詢的好處 就是一條一條的查詢,比如說要查詢100條資料,那麼就要傳送100次網路請求,這個開銷還是很大的 如果進行批量查詢的話,查詢100條資料,就只要傳送1次網路請求,網路請求的效能開銷縮減100倍 2 mget的語法 1 一條一條的查詢 get test inde...

python高階用法 Python高階用法

python高階用法 三元表示式 x 10 y 20 print x if x y else y x 100 y 20 print x if x y else y 列表推導式和生成器 列表推導式 print i for i in range 10 print i 2 for i in range 1...

華碩win10鍵盤失靈 Win10 高階用法彙總

電腦作為我們每天都離不開的工具,深入了解我們的作業系統,可以幫助我們更好地使用它,為工作帶來極大便利。今天給大家介紹一些 win10 系統自帶的超讚功能,方便大家日常工作使用。1 多桌面辦公 使用快捷鍵 win tab 開啟任務檢視,單擊右下角可以新建桌面。也可以使用 win ctrl d 來建立新...