袁庭新老師ES系列18節(jié)|Spring Data Elasticsearch高級
前言
這一章節(jié)袁老師將帶領(lǐng)同學(xué)們來學(xué)習(xí)Spring Data Elasticsearch高級操作相關(guān)的內(nèi)容。我們繼續(xù)來探索SDE是如何將原始操作Elasticsearch的客戶端API進(jìn)行封裝的,以及通過Spring Data Elasticsearch如何來操作ES。準(zhǔn)備好了嗎?我們繼續(xù)來探索ES的內(nèi)容。
一. 索引數(shù)據(jù)CRUD操作
SDE的索引數(shù)據(jù)CRUD操作并沒有封裝在ElasticsearchTemplate類中,封裝在ElasticsearchRepository這個(gè)接口中。
首先在com.yx.respository包下,需要自定義一個(gè)ProductRepository的接口,該接口需要繼承ElasticsearchRespository<Product>接口。
1.創(chuàng)建索引數(shù)據(jù)
創(chuàng)建索引數(shù)據(jù)時(shí),有單個(gè)創(chuàng)建和批量創(chuàng)建之分。
1.先來看單個(gè)創(chuàng)建。在SpringDataESTests類中定義addDocument()方法。
2.再來看批量創(chuàng)建。在SpringDataESTests類中定義addDocuments()方法。
2.查詢索引數(shù)據(jù)
2.1.根據(jù)id查詢數(shù)據(jù)
ElasticsearchRepository接口中封裝了根據(jù)id查詢的findById(ID var1)方法。
1.在SpringDataESTests類中定義findById()方法。
2.運(yùn)行findById()方法,輸出結(jié)果見下:
2.2.查詢所有數(shù)據(jù)
ElasticsearchRepository接口中封裝了查詢所有數(shù)據(jù)的findAll()方法。
1.在SpringDataESTests類中定義findAll()方法。
2.運(yùn)行findAll()方法,輸出結(jié)果見下:
3.自定義方法查詢
3.1.存儲庫查詢關(guān)鍵字
ElasticsearchRepository提供的查詢方法有限,但是它卻提供了非常強(qiáng)大的自定義查詢功能。只要遵循Spring Data Elasticsearch提供的語法,我們可以任意定義方法聲明。



3.2.自定義方法查詢案例
1.在ProductRepository接口中定義根據(jù)商品的價(jià)格區(qū)間查詢商品數(shù)據(jù)的findByPriceBetween()方法。
2.無需寫實(shí)現(xiàn),SDE會自動幫我們實(shí)現(xiàn)該方法,我們只需要用即可。在SpringDataESTests類中定義findByPriceBetween()方法。
3.運(yùn)行findByPriceBetween()方法,輸出結(jié)果見下:
二. 原生查詢
1.原生查詢介紹
如果覺得上述接口依然不符合你的業(yè)務(wù)需求的話,SDE也支持原生查詢的操作。這個(gè)時(shí)候還是使用ElasticsearchTemplate,而查詢條件的構(gòu)建是通過一個(gè)名為NativeSearchQueryBuilder的類來完成的,不過這個(gè)類的底層還是使用的原生API中的QueryBuilders、AggregationBuilders、HighlightBuilders等工具來實(shí)現(xiàn)的。
2.原生查詢案例
需求描述:
查詢title中包含“手機(jī)”的商品;
且以價(jià)格升序進(jìn)行排序;
進(jìn)行分頁查詢:每頁展示2條數(shù)據(jù),查詢第1頁;
最后對查詢結(jié)果進(jìn)行聚合分析:獲取品牌及個(gè)數(shù)。
1.在SpringDataESTests類中定義nativeQuery()方法。
注意:上述查詢不支持高亮結(jié)果。
2.運(yùn)行nativeQuery()方法,輸出結(jié)果見下:
三. 高亮顯示
1.高亮顯示需求
需求描述:查詢title中包含“小米手機(jī)”的商品,并將title中對應(yīng)的分詞通過<span style='color:red'></span>標(biāo)簽進(jìn)行高亮修飾。
2.高亮顯示實(shí)現(xiàn)
1.在com.yx.mapper包下自定義搜索結(jié)果映射ProductSearchResultMapper類。
2.高亮實(shí)現(xiàn)。重構(gòu)nativeQuery()方法,使用自定義查詢結(jié)果映射,來實(shí)現(xiàn)高亮顯示。
3.運(yùn)行nativeQuery()測試方法后,輸出結(jié)果見下。
四. 結(jié)語
Spring Data Elasticsearch基于spring data API大大簡化了Elasticsearch的操作,從而簡化開發(fā)人員的代碼,提高開發(fā)效率。然后我們給大家介紹了使用Spring Data對Elasticsearch進(jìn)行了增、刪、改、查操作。
同學(xué)們,關(guān)于Elasticsearch的所有內(nèi)容袁老師就給大家介紹到這里。還有很多前沿技術(shù)等著大家去探索,“路漫漫其修遠(yuǎn)昔,吾將上下而求索”。最后,祝愿各位小伙伴未來學(xué)業(yè)有成,一切如意!