如何利用Java實現(xiàn)索引庫相關(guān)的分頁、排序和聚合

這篇文章主要講解了“如何利用Java實現(xiàn)索引庫相關(guān)的分頁、排序和聚合”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何利用Java實現(xiàn)索引庫相關(guān)的分頁、排序和聚合”吧!

創(chuàng)新互聯(lián)主營門頭溝網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機APP定制開發(fā),門頭溝h5成都小程序開發(fā)搭建,門頭溝網(wǎng)站營銷推廣歡迎門頭溝等地區(qū)企業(yè)咨詢

學(xué)習(xí)計劃安排,利用Java代碼來實現(xiàn)對索引庫的各種操作:
通過自定義方法實現(xiàn)匹配查詢、范圍查詢。
原生的查詢代碼又是如何編寫的?
最后還有聚合相關(guān)的代碼編寫。
一、自定義方法
昨天學(xué)了最基礎(chǔ)的幾種增刪改查方法,但查詢在實際應(yīng)用中顯然沒這么簡單。
比如用戶要匹配查詢,前幾天我們有學(xué)過,有match匹配和term匹配兩種常用的方式。
這些在Java中又是哪些方法來對應(yīng)呢?
有原生的方法可以是使用,但是比較麻煩,這里使用springdata提供的自定義方法。
1自定義方法實現(xiàn)多種查詢方法
昨天有使用到findAll()方法,這是自帶的方法,看其語義也就能知道其實查詢所有數(shù)據(jù)。
但是很多時候并不是一個查詢所有方法就能解決的,所以需要自己自定義說明。
①queryItemsByTitleMatchs
方法名一定要按照其格式來,一看到也就很好理解,是根據(jù)Title這個字段匹配查詢。
其中后面還可以接“And”“Or”這些邏輯運算,實現(xiàn)布爾查詢。
②queryItemsByPriceBetween
一樣的道理,范圍查詢也有其格式,也就是between這個單詞的使用。

如何利用Java實現(xiàn)索引庫相關(guān)的分頁、排序和聚合

2自定義方法的使用
①根據(jù)Title詞條匹配
直接調(diào)用自定義的match匹配方法,在參數(shù)中說明要搜索的關(guān)鍵字是“小米手機”,這樣就能match匹配到和“小米手機”相關(guān)的數(shù)據(jù)了。
②根據(jù)price范圍查詢
直接調(diào)用自定義的范圍查詢方法,在參數(shù)中說明價格區(qū)間是2000-4000,這樣也就能范圍查詢出這個價格區(qū)間相關(guān)的數(shù)據(jù)了。
3運行方法,觀察結(jié)果
①“小米手機”匹配結(jié)果
這個前幾天專門說明過,因為title這個字段類型是text,是要分詞的,所以“小米手機”被分詞成了“小米”和“手機”。
只要是和上述分詞相關(guān)的數(shù)據(jù)都會被查詢出來,所以“堅果手機”也被查詢出來了。
②價格在2000-4000區(qū)間的數(shù)據(jù)
結(jié)果也就顯而易見了,如上圖所示。
二、原生的查詢
自定義方法雖然很簡單,但有時候不能很好地實現(xiàn)業(yè)務(wù)需求,比如查詢條件過多時。
這個時候就需要結(jié)合官方提供的原生查詢了。
①創(chuàng)建查詢的構(gòu)造器
NativeSearchQueryBuilder也就是原生搜索查詢構(gòu)造器的意思,通過它也就可以添加各種查詢條件。
②添加查詢條件
withQuery():QueryBuilders說明查詢
例子中是match匹配查詢,所以在Java中也就是matchQuery方法,參數(shù):title是字段,“小米手機”是該字段對應(yīng)的數(shù)據(jù)。
withPageable():PageRequest實現(xiàn)分頁
of()方法即可實現(xiàn)分頁,其中頁面數(shù)從0頁開始,每頁大小上述圖中指定的是2。
withSort():SortBuilders實現(xiàn)排序
fieldSort()方法說明需要排序的字段。
order()方法說明排序方式。
其可以鏈?zhǔn)骄幊滩煌5靥砑硬樵儣l件。
③再調(diào)用search方法完成查詢
使用自定義的itemRepository接口調(diào)用search()方法,同時說明查詢條件,也就是原生的查詢只是說明了下查詢條件。
查詢結(jié)果測試
match匹配“小米手機”,查詢數(shù)據(jù)有3條。
在分頁的時候就說明了每頁顯示2條數(shù)據(jù),所以這里一共有2頁數(shù)據(jù)。
當(dāng)前顯示的是首頁,也就是第0頁。
Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。讀后感(https://www.yuananren.com)Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程 。Java具有簡單性、面向?qū)ο?、分布式、健壯性、安全性、平臺獨立與可移植性、多線程、動態(tài)性等特點   。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等  。
總之:自定義方法之后,不需要我們寫具體是如何查詢的了,可以直接使用,但是方法名需要遵循命名規(guī)范,如果不能正常使用,極有可能就是方法名格式不對。
三、原生的聚合
先對聚合做一個簡單的回顧:
其實無外乎還是那核心4個步驟:
aggs說明這是一個聚合。
給該聚合自定義一個名稱。
說明聚合類型:桶有自己對應(yīng)到的各種類型,度量也有自己對應(yīng)的各種類型,上述例子中是桶里面的terms類型。
說明聚合字段:brand。也就是根據(jù)brand字段劃分成多個桶。
好,這是在Elasticsearch中的使用,那如何用Java代碼來操作它呢?
①創(chuàng)建構(gòu)造器
這個和原生的查詢一樣,都是使用該構(gòu)造器。
②添加聚合
這一段代碼就將聚合的三要素都說清楚了。
聚合名叫什么?叫popularBrand。
聚合是什么類型?terms()方法也就是terms類型,不同的類型在Java中對應(yīng)不同的方法。
聚合字段是哪個?field說明是brand字段、
③得到聚合結(jié)果
使用elasticsearchTemplate查詢聚合,返回聚合結(jié)果。
④結(jié)果解析
這段代碼就有點復(fù)雜了,我們做一個對比。
利用kibana響應(yīng)的是一個json數(shù)據(jù),Java中的這段代碼其實也就是對json數(shù)據(jù)的解析。
getAggregations(),聚合是可以嵌套有多個的,只不過例子中只寫了一個聚合。
get():根據(jù)聚合名找到需要的那個聚合。
getBuckets():找到對應(yīng)的桶數(shù)據(jù)。json數(shù)據(jù)中還有一些其它數(shù)據(jù),而我們自然需要的也就是buckets數(shù)據(jù)。
獲取桶中對應(yīng)的數(shù)據(jù)。
說白了Java對聚合的解析其實也就是對json數(shù)據(jù)的解析過程,就算不是聚合,其它json數(shù)據(jù)的解析思路都是一樣的。

感謝各位的閱讀,以上就是“如何利用Java實現(xiàn)索引庫相關(guān)的分頁、排序和聚合”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對如何利用Java實現(xiàn)索引庫相關(guān)的分頁、排序和聚合這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站欄目:如何利用Java實現(xiàn)索引庫相關(guān)的分頁、排序和聚合
鏈接分享:http://muchs.cn/article38/gjscsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站制作、關(guān)鍵詞優(yōu)化、網(wǎng)站收錄、網(wǎng)頁設(shè)計公司、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)