您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何利用Java實現索引庫相關的分頁、排序和聚合”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何利用Java實現索引庫相關的分頁、排序和聚合”吧!
學習計劃安排,利用Java代碼來實現對索引庫的各種操作:
通過自定義方法實現匹配查詢、范圍查詢。
原生的查詢代碼又是如何編寫的?
最后還有聚合相關的代碼編寫。
一、自定義方法
昨天學了最基礎的幾種增刪改查方法,但查詢在實際應用中顯然沒這么簡單。
比如用戶要匹配查詢,前幾天我們有學過,有match匹配和term匹配兩種常用的方式。
這些在Java中又是哪些方法來對應呢?
有原生的方法可以是使用,但是比較麻煩,這里使用springdata提供的自定義方法。
1自定義方法實現多種查詢方法
昨天有使用到findAll()方法,這是自帶的方法,看其語義也就能知道其實查詢所有數據。
但是很多時候并不是一個查詢所有方法就能解決的,所以需要自己自定義說明。
①queryItemsByTitleMatchs
方法名一定要按照其格式來,一看到也就很好理解,是根據Title這個字段匹配查詢。
其中后面還可以接“And”“Or”這些邏輯運算,實現布爾查詢。
②queryItemsByPriceBetween
一樣的道理,范圍查詢也有其格式,也就是between這個單詞的使用。
2自定義方法的使用
①根據Title詞條匹配
直接調用自定義的match匹配方法,在參數中說明要搜索的關鍵字是“小米手機”,這樣就能match匹配到和“小米手機”相關的數據了。
②根據price范圍查詢
直接調用自定義的范圍查詢方法,在參數中說明價格區間是2000-4000,這樣也就能范圍查詢出這個價格區間相關的數據了。
3運行方法,觀察結果
①“小米手機”匹配結果
這個前幾天專門說明過,因為title這個字段類型是text,是要分詞的,所以“小米手機”被分詞成了“小米”和“手機”。
只要是和上述分詞相關的數據都會被查詢出來,所以“堅果手機”也被查詢出來了。
②價格在2000-4000區間的數據
結果也就顯而易見了,如上圖所示。
二、原生的查詢
自定義方法雖然很簡單,但有時候不能很好地實現業務需求,比如查詢條件過多時。
這個時候就需要結合官方提供的原生查詢了。
①創建查詢的構造器
NativeSearchQueryBuilder也就是原生搜索查詢構造器的意思,通過它也就可以添加各種查詢條件。
②添加查詢條件
withQuery():QueryBuilders說明查詢
例子中是match匹配查詢,所以在Java中也就是matchQuery方法,參數:title是字段,“小米手機”是該字段對應的數據。
withPageable():PageRequest實現分頁
of()方法即可實現分頁,其中頁面數從0頁開始,每頁大小上述圖中指定的是2。
withSort():SortBuilders實現排序
fieldSort()方法說明需要排序的字段。
order()方法說明排序方式。
其可以鏈式編程不停地添加查詢條件。
③再調用search方法完成查詢
使用自定義的itemRepository接口調用search()方法,同時說明查詢條件,也就是原生的查詢只是說明了下查詢條件。
查詢結果測試
match匹配“小米手機”,查詢數據有3條。
在分頁的時候就說明了每頁顯示2條數據,所以這里一共有2頁數據。
當前顯示的是首頁,也就是第0頁。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。讀后感(https://www.yuananren.com)Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程 。Java具有簡單性、面向對象、分布式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特點 。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等 。
總之:自定義方法之后,不需要我們寫具體是如何查詢的了,可以直接使用,但是方法名需要遵循命名規范,如果不能正常使用,極有可能就是方法名格式不對。
三、原生的聚合
先對聚合做一個簡單的回顧:
其實無外乎還是那核心4個步驟:
aggs說明這是一個聚合。
給該聚合自定義一個名稱。
說明聚合類型:桶有自己對應到的各種類型,度量也有自己對應的各種類型,上述例子中是桶里面的terms類型。
說明聚合字段:brand。也就是根據brand字段劃分成多個桶。
好,這是在Elasticsearch中的使用,那如何用Java代碼來操作它呢?
①創建構造器
這個和原生的查詢一樣,都是使用該構造器。
②添加聚合
這一段代碼就將聚合的三要素都說清楚了。
聚合名叫什么?叫popularBrand。
聚合是什么類型?terms()方法也就是terms類型,不同的類型在Java中對應不同的方法。
聚合字段是哪個?field說明是brand字段、
③得到聚合結果
使用elasticsearchTemplate查詢聚合,返回聚合結果。
④結果解析
這段代碼就有點復雜了,我們做一個對比。
利用kibana響應的是一個json數據,Java中的這段代碼其實也就是對json數據的解析。
getAggregations(),聚合是可以嵌套有多個的,只不過例子中只寫了一個聚合。
get():根據聚合名找到需要的那個聚合。
getBuckets():找到對應的桶數據。json數據中還有一些其它數據,而我們自然需要的也就是buckets數據。
獲取桶中對應的數據。
說白了Java對聚合的解析其實也就是對json數據的解析過程,就算不是聚合,其它json數據的解析思路都是一樣的。
感謝各位的閱讀,以上就是“如何利用Java實現索引庫相關的分頁、排序和聚合”的內容了,經過本文的學習后,相信大家對如何利用Java實現索引庫相關的分頁、排序和聚合這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。