今天是劉小愛自學Java的第160天。
感謝你的觀看,謝謝你。
學習計劃安排,關於搜索功能:
搜索結果過濾的補充說明。布爾組合查詢、範圍查詢…等多種高級查詢。以及非常重要的聚合查詢,其兩種常用類型:桶和度量的說明與使用。昨天學了match匹配和term匹配,這是兩種最基礎也很重要的查詢方式,使用起來也簡單。
一、結果過濾
補充一個知識點,關於結果過濾。
先將例子中索引庫的數據做一個簡單的說明,昨天的學習中也有詳細介紹。
索引庫liuxiaoai01中有title和price兩個欄位,添加了「小愛手機」、「大愛手機」、「超愛手機」和「小愛電視」一共4條數據。
如果不將結果過濾,在結果中會將title和price對應的數據都顯示出來。
而通過"_source"就能指定欄位,上圖中指定了title欄位,所以價格數據就被過濾掉了。
除了上述用法,還有兩種用法:
①includes的使用
includes翻譯過來就是包含的意思。
根據其語義理解其作用,也就是說如果索引庫中有多個欄位,可以通過includes來指定想要顯示的欄位。
②excludes的使用
excludes翻譯過來就是排除的意思。
也就是可以通過excludes指定不想要顯示的欄位,很好理解
二、高階查詢
1布爾組合查詢
關鍵字是bool,它本身並不是一種查詢方式,而是將查詢方式通過邏輯運算組合起來了。
①must
翻譯過來就是必須的意思,可以填寫多個查詢條件(中括號本身表示的也就是數組)
多個查詢條件通過must連接,相當於以前常用的and,說白了也就是邏輯運算符「與」。
②must_not
剛好就和上述must相反,說白了也就是邏輯運算符「與」。
③should
通用的道理:多個查詢條件通過should連接,相當於以前常用的or,說白了也就是邏輯運算符「與」。
ps:關於其格式使用,不要看它圖中好像挺複雜的樣子,其實都可以通過工具有提示,並且這些寫多了基本也就知道了。
2範圍查詢
商品都有自己的價格,用戶可以通過設定價格區間搜索到對應的商品。
range就可以實現範圍查詢,其中通過四種字符說明查詢的區間。
gt:表示大於get:表示大於等於lt:表示小於lte:表示小於等於3模糊查詢
實際應用中用戶搜索時輸入的詞條與實際詞條存在偏差,但也能搜索到對應的數據,這就需要使用到模糊查詢了。
關鍵字是fuzzy,翻譯過來也就是模糊的。
上述例子中,我添加了一個apple數據,查詢的時候通過appla就可以模糊查詢到,但是偏差的編輯距離不能超過2,其中也可以通過fuzziness來指定允許的編輯距離。
此外還有過濾,排序這些操作,並且上述這些操作一般都是組合起來使用的,其實無外乎就是記住關鍵字:
關於過濾對應的也就是filter。關於排序也就對應著sort。三、聚合aggregations
Elasticsearch中的聚合包含多種類型,最常用的有兩種:
①桶(bucket)
其實蠻好理解的,比如上海現在一直在執行的垃圾分類,就有多個桶:幹垃圾桶、溼垃圾桶、有害垃圾桶以及可回收物桶。
所以桶的作用就在於按照某種方式對數據進行分組,它只負責分組,不進行運算。
②度量(metrics)
也就是我們以前學的聚合函數,比如求平均值、最大值、最小值以及求和…等這些運算。
2聚合的使用
在使用之前,我們需要創建一個索引庫並添加數據,作為聚合的測試數據。
cars索引庫,有color和make兩個欄位,欄位類型都為keyword,也就是不分詞。
也就是關於汽車的一個索引庫,有顏色和生產商這兩個欄位。
根據我們這兩天的學習情況就可以簡單地實現,具體添加了哪些數據就不做說明了。
桶的使用
size表示是查詢條數,我這裡設置為1,主要在於一個了解,重點在於聚合結果。
aggs也就是聚合aggregations的簡寫,說明這是一個聚合查詢:
popular_make:聚合名,這是自定義的一個名稱,儘量見名知義即可。terms:劃分桶的方式,有多種方式,這裡是根據詞條劃分。field:劃分桶的欄位,這裡根據make劃分。這樣聚合之後,索引庫中的數據就根據field這個欄位劃分成了4個桶:例子中也就是"honda"、"ford"、"toyota"、"bmw"。
elasticsearch中關於桶的劃分方式有多種:
Date Histogram:根據日期分組。Historgram:根據數值分組。Terms:根據詞條內容分組,也就是上述使用的。Range:數值和日期的範圍分組。……等等多種方式。度量的使用
認真觀察①和②會發現它們的格式就是一樣的,格式無外乎就是4步驟:
aggs說明是聚合查詢。給這個聚合自定義一個名稱。說明聚合類型:①中terms是桶的類型,②中avg是度量的類型。field說明聚合欄位:①中根據make劃分成多個桶,②中求桶中price欄位的平均值。上述例子也能看出聚合之間能嵌套使用。
elasticsearch中度量的劃分方式也有多種:
Avg求平均值;Max求最大值;Min求最小值;Sum求和……等等多種度量聚合方式
當然關於聚合的使用,spring集成了一個子模塊Spring Data Elasticsearch,在Java中使用起來更簡單,具體後續說明。
最後
行有不得反求諸己,我是@劉小愛
一個白天上班晚上學習的95後滬漂,不為其它,只為學會自律做好自己,也願我的每日打卡能給你帶來勇氣,歡迎點讚關注和評論。