Spring Boot中Elasticsearch的連接配置原理與使用詳解
引言
Elasticsearch是一種開源的分布式搜索和數(shù)據(jù)分析引擎,它可用于全文搜索、結(jié)構(gòu)化搜索、分析等應(yīng)用場(chǎng)景。在Spring Boot中,我們可以通過Elasticsearch實(shí)現(xiàn)對(duì)數(shù)據(jù)的搜索和分析。本文將介紹Spring Boot中Elasticsearch的連接配置、原理和使用方法。
Elasticsearch連接配置
在Spring Boot中,我們可以通過引入Elasticsearch依賴來使用它。在pom.xml文件中添加以下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>然后在application.properties或application.yml文件中添加Elasticsearch的配置:
spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.cluster-nodes=localhost:9300
以上配置中,cluster-name指定了Elasticsearch集群的名稱,cluster-nodes指定了Elasticsearch節(jié)點(diǎn)的地址和端口號(hào)。
另外,如果需要使用Elasticsearch的安全功能,可以添加以下配置:
spring.data.elasticsearch.repositories.enabled=true spring.data.elasticsearch.cluster-nodes=localhost:9300 spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.username=elastic spring.data.elasticsearch.password=changeme
以上配置中,spring.data.elasticsearch.repositories.enabled指定啟用Elasticsearch的存儲(chǔ)庫(kù),spring.data.elasticsearch.username和spring.data.elasticsearch.password指定了Elasticsearch的用戶名和密碼。當(dāng)然,這需要在Elasticsearch中進(jìn)行相應(yīng)的配置。
Elasticsearch連接原理
Spring Boot中使用Elasticsearch連接時(shí),需要使用Elasticsearch的Java客戶端連接Elasticsearch集群。Elasticsearch的Java客戶端使用TransportClient或NodeClient來連接Elasticsearch集群。
在使用TransportClient連接Elasticsearch集群時(shí),需要指定Elasticsearch節(jié)點(diǎn)的地址和端口號(hào)。TransportClient會(huì)隨機(jī)選擇一個(gè)可用的節(jié)點(diǎn)進(jìn)行連接,并在連接失敗時(shí)自動(dòng)重試連接其他節(jié)點(diǎn)。在連接成功后,TransportClient將與Elasticsearch集群建立TCP連接,并通過該連接與其進(jìn)行通信。
在使用NodeClient連接Elasticsearch集群時(shí),需要在應(yīng)用程序中啟動(dòng)一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)將與Elasticsearch集群中的其他節(jié)點(diǎn)通信。NodeClient使用Java API與本地節(jié)點(diǎn)進(jìn)行通信,然后將請(qǐng)求轉(zhuǎn)發(fā)到Elasticsearch集群中的其他節(jié)點(diǎn)。這種方式可以減少網(wǎng)絡(luò)通信的成本,并提高查詢和索引的性能。
Elasticsearch使用方法
在Spring Boot中,我們可以通過注入ElasticsearchTemplate或ElasticsearchRestTemplate來使用Elasticsearch。這兩個(gè)類都實(shí)現(xiàn)了ElasticsearchOperations接口,提供了對(duì)Elasticsearch的各種操作。
ElasticsearchTemplate
ElasticsearchTemplate是Elasticsearch Java客戶端提供的一種操作Elasticsearch集群的方式。它提供了大量的方法,包括索引、更新、刪除、搜索等操作。
以下是一個(gè)使用ElasticsearchTemplate進(jìn)行搜索的示例:
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
public List<Article> searchArticle(String keyword) {
QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", keyword);
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.build();
SearchHits<Article> searchHits = elasticsearchTemplate.search(searchQuery, Article.class);
return Arrays.stream(searchHits.getHits())
.map(SearchHit::getContent)
.collect(Collectors.toList());
}以上代碼中,我們首先通過QueryBuilder創(chuàng)建了一個(gè)查詢條件,然后通過NativeSearchQueryBuilder創(chuàng)建了一個(gè)搜索請(qǐng)求。最后,我們使用ElasticsearchTemplate的search方法執(zhí)行搜索,并將結(jié)果轉(zhuǎn)換為Article對(duì)象列表。
ElasticsearchRestTemplate
ElasticsearchRestTemplate是Spring Data Elasticsearch提供的一種操作Elasticsearch集群的方式。它提供了大量的方法,包括索引、更新、刪除、搜索等操作。與ElasticsearchTemplate不同的是,ElasticsearchRestTemplate使用REST API與Elasticsearch集群通信。
以下是一個(gè)使用ElasticsearchRestTemplate進(jìn)行索引操作的示例:
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
public void indexArticle(Article article) {
IndexQuery indexQuery = new IndexQueryBuilder()
.withObject(article)
.build();
elasticsearchRestTemplate.index(indexQuery, IndexCoordinates.of("articles"));
}以上代碼中,我們首先通過IndexQueryBuilder創(chuàng)建了一個(gè)索引請(qǐng)求,然后使用ElasticsearchRestTemplate的index方法執(zhí)行索引操作,將Article對(duì)象保存到名為"articles"的索引中。
結(jié)論
本文介紹了Spring Boot中Elasticsearch的連接配置、原理和使用方法。在使用Elasticsearch時(shí),我們需要注意一些配置和使用細(xì)節(jié),如指定Elasticsearch集群的名稱和節(jié)點(diǎn)地址、選擇合適的Java客戶端等。通過本文的介紹,我們希望讀者能夠更好地理解Spring Boot中Elasticsearch的使用方法,并在項(xiàng)目中更加靈活地應(yīng)用。
到此這篇關(guān)于Spring Boot中Elasticsearch的連接配置原理與使用詳解的文章就介紹到這了,更多相關(guān)Spring Boot Elasticsearch連接配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Cloud?Gateway整合sentinel?實(shí)現(xiàn)流控熔斷的問題
本文給大家介紹下?spring?cloud?gateway?如何整合?sentinel實(shí)現(xiàn)流控熔斷,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友一起看看吧2022-02-02
Java服務(wù)剛啟動(dòng)時(shí)接口超時(shí)排查全過程
這篇文章主要為大家介紹了Java服務(wù)剛啟動(dòng)時(shí),一小波接口超時(shí)排查全過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
ShardingSphere結(jié)合MySQL實(shí)現(xiàn)分庫(kù)分表的項(xiàng)目實(shí)踐
在實(shí)際開發(fā)中,如果表的數(shù)據(jù)過大我們需要把一張表拆分成多張表,本文主要介紹了使用ShardingSphere實(shí)現(xiàn)MySQL分庫(kù)分表,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03

