SpringBoot3.x使用es進(jìn)行數(shù)據(jù)查詢的方式
概要
SpringBoot3中的elasticsearch版本已經(jīng)來到8.x版本,相比較于SpringBoot2中的7.x版本相關(guān)寫法已經(jīng)發(fā)生改變。在SpringBoot2中會(huì)使用ElasticsearchRestTemplate和es進(jìn)行交互,但這個(gè)類在SpringBoot3中已經(jīng)被移除,需要使用ElasticsearchTemplate或者ElasticsearchClient和es進(jìn)行交互。下面介紹這兩個(gè)類的基本使用方式。
ElasticsearchTemplate
@Test
void test_1() {
NativeQuery query = new NativeQueryBuilder()
.withPageable(Pageable.ofSize(100))
//使用lambda表達(dá)式使其更符合es語句的寫法
.withQuery(q -> q
.bool(b -> b
.filter(f -> f
.term(t -> t
.field("Name")
.value("test")))))
.withSort(s -> s
.field(f -> f
.field("Name")
.order(SortOrder.Desc)))
.build();
SearchHits<User> search = elasticsearchTemplate.search(query, User.class, IndexCoordinates.of("test-topic"));
List<SearchHit<User>> searchHits = search.getSearchHits();
for (SearchHit<User> searchHit : searchHits) {
System.out.println(searchHit.getContent().getName());
}
}以上的es查詢語句等價(jià)于
{
"query": {
"bool": {
"filter": [
{
"term": {
"Name": {
"value": "test"
}
}
}
]
}
},
"from": 0,
"size": 100,
"sort": [
{
"Name": {
"order": "desc"
}
}
]
}
ElasticsearchClient
@Test
void test_2() throws IOException {
Function<SearchRequest.Builder, ObjectBuilder<SearchRequest>> query = fn-> fn
.index("test-topic")
.size(100)
//使用lambda表達(dá)式使其更符合es語句的寫法
.query(q -> q
.bool(b -> b
.filter(f -> f
.term(t -> t
.field("Name")
.value("test")))))
.sort(s -> s
.field(f -> f
.field("Name")
.order(SortOrder.Desc)));
SearchResponse<User> search = elasticsearchClient.search(query, User.class);
List<Hit<User>> hits = search.hits().hits();
for (Hit<User> hit : hits) {
System.out.println(hit.source().getName());
}
}小結(jié)
1.依賴引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>2.ElasticsearchTemplate和ElasticsearchClient已經(jīng)自動(dòng)裝配,業(yè)務(wù)類中直接注入即可。
3.User類
/**
* test_1:使用第一種測(cè)試時(shí),實(shí)體屬性和es字段屬性不對(duì)應(yīng)時(shí)需要使用@Field(org.springframework.data.elasticsearch.annotations.Field)注解標(biāo)識(shí)
* test_2:使用第二種測(cè)試時(shí),實(shí)體屬性和es字段屬性不對(duì)應(yīng)時(shí)需要使用@JsonProperty(com.fasterxml.jackson.annotation.JsonProperty)注解標(biāo)識(shí)
*/
@Data
public class User {
@Id
private String id;
@Field("Name")
@JsonProperty("Name")
private String name;
}到此這篇關(guān)于SpringBoot3.x使用es進(jìn)行數(shù)據(jù)查詢的方式的文章就介紹到這了,更多相關(guān)springboot使用es數(shù)據(jù)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
為什么Java是程序員受歡迎的語言這幾個(gè)原因你該清楚
Java一直穩(wěn)居程序員很受歡迎的編程語言的榜首,是企業(yè)中使用最廣泛的編程語言。這篇文章主要介紹了為什么Java是程序員受歡迎的語言這幾個(gè)原因你該清楚,需要的朋友可以參考下2020-07-07
Java中RSA加密解密的實(shí)現(xiàn)方法分析
這篇文章主要介紹了Java中RSA加密解密的實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了java實(shí)現(xiàn)RSA加密解密算法的具體步驟與相關(guān)操作技巧,并附帶了關(guān)于RSA算法密鑰長(zhǎng)度/密文長(zhǎng)度/明文長(zhǎng)度的參考說明,需要的朋友可以參考下2017-07-07
Java在ElasticSearch中使用LocalDatetime類型
最近在開發(fā)一個(gè)搜索功能的需求的時(shí)候,遇到了LocalDatetime類型不能保存到ElasticSearch中的問題,這篇文章主要介紹了Java在ElasticSearch中使用LocalDatetime類型2023-10-10
Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法
這篇文章主要介紹了Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的方法,涉及Java數(shù)學(xué)運(yùn)算計(jì)算隨機(jī)數(shù)及字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Spring?Boot的優(yōu)點(diǎn)及項(xiàng)目創(chuàng)建步驟詳解
這篇文章主要介紹了Spring?Boot的優(yōu)點(diǎn)及項(xiàng)目創(chuàng)建步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
Cursor?IDE中Java項(xiàng)目無法跳轉(zhuǎn)到方法定義問題的完美解決方案
在編寫Java代碼時(shí),我們經(jīng)常需要快速查看某個(gè)方法的實(shí)現(xiàn),通常,只需按住Ctrl鍵并點(diǎn)擊該方法,IDEA就會(huì)跳轉(zhuǎn)到方法的定義,這篇文章主要介紹了Cursor?IDE中Java項(xiàng)目無法跳轉(zhuǎn)到方法定義問題的完美解決方案,需要的朋友可以參考下2026-01-01

