SpringBoot整合(ES)ElasticSearch7.8實(shí)踐
SpringBoot整合ElasticSearch7.8
所有的教程都參考于官方文檔,這里給大家說(shuō)明文檔位置,搜索elasticsearch官網(wǎng)的Docs界面,找到ElasticSearch Client這個(gè)選項(xiàng),圖中也有位置,根據(jù)圖中的位置找就行了。
前提是要安裝好ES,挺簡(jiǎn)單的,這里就不說(shuō)了。
添加依賴
根據(jù)官方文檔導(dǎo)入對(duì)應(yīng)架包

<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.1</version>
</dependency>
初始化

RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http"),
new HttpHost("localhost", 9201, "http")));
//使用完后關(guān)閉資源
client.close();
所有的方法都在RestHighLevelClient類中了,直接去使用即可
創(chuàng)建SpringBoot項(xiàng)目
SpringBoot中已經(jīng)有了starter,直接選擇NoSQL里面導(dǎo)入啟動(dòng)依賴就可以了


創(chuàng)建配置類
@Configuration
public class ElasticConfig {
@Bean
public RestHighLevelClient getRestHighLevelClient(){
RestHighLevelClient client = new RestHighLevelClient(
//如果是集群再配置多個(gè)
RestClient.builder(new HttpHost("127.0.0.1",9200,"http"))
);
return client;
}
}
測(cè)試案例
創(chuàng)建索引
查看官方手冊(cè)

可以看到很多的API,我們?cè)囋囁饕鼳PI,點(diǎn)擊Index APIs

第一個(gè)是創(chuàng)建索引的簡(jiǎn)單方式,創(chuàng)建完成后還要發(fā)送指令過(guò)去,發(fā)送方式拉到最下就可以看到一個(gè)同步和異步的發(fā)送,我們使用同步就行了。

我們直接在test目錄測(cè)試下
@SpringBootTest
class ElasticsearchDemoApplicationTests {
@Test
void contextLoads() {
}
@Qualifier("getRestHighLevelClient")
@Autowired
private RestHighLevelClient client;
/**
* 創(chuàng)建索引
*/
@Test
public void test1(){
//注意索引名要小寫(xiě)
CreateIndexRequest request = new CreateIndexRequest("springboot_es_test1");
try {
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果執(zhí)行不報(bào)錯(cuò),那就可以打開(kāi)可視化工具查看或者kibana去查看索引創(chuàng)建情況

獲取索引
我們也可以直接通過(guò)java代碼獲取索引去檢測(cè),這個(gè)代碼也是可以從官方獲取的
/**
* 獲取索引
*/
@Test
public void test2(){
GetIndexRequest request = new GetIndexRequest("springboot_es_test1");
try {
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
System.out.println(exists);
} catch (IOException e) {
e.printStackTrace();
}
}

創(chuàng)建索引并加入對(duì)象的屬性和值
1、查看官方案例

2、創(chuàng)建實(shí)體類
這里使用的lombok,不會(huì)使用的小伙伴手動(dòng)添加get/set全參構(gòu)造和無(wú)參構(gòu)造方法
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
}
3、測(cè)試方法
/**
* 測(cè)試對(duì)象的操作
*/
@Test
public void test3(){
//創(chuàng)建對(duì)象
User user = new User("測(cè)試", 13);
IndexRequest request = new IndexRequest("posts");
request.id("1");
//對(duì)象轉(zhuǎn)為json
request.source(JSON.toJSON(user), XContentType.JSON);
try {
//發(fā)送
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
//獲取索引內(nèi)容看看
GetRequest getRequest = new GetRequest("posts","1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
System.out.println(getResponse);
} catch (IOException e) {
e.printStackTrace();
}
}

批量插入數(shù)據(jù)
真實(shí)的項(xiàng)目一般都是大批量的插入數(shù)據(jù),比如從數(shù)據(jù)庫(kù)中、消息隊(duì)列或者緩存中獲取數(shù)據(jù)插入等等,ES也提供了批量插入的方法,BulkRequest類。
/**
* 設(shè)置批量插入
*/
@Test
public void test4(){
//創(chuàng)建批量請(qǐng)求
BulkRequest bulkRequest = new BulkRequest();
//超時(shí)時(shí)間
bulkRequest.timeout("10s");
//模擬數(shù)據(jù)
ArrayList<User> users = new ArrayList<>();
users.add(new User("張1",1));
users.add(new User("張2",2));
users.add(new User("張3",3));
users.add(new User("張4",4));
int i=0 ;
//批量插入
for(User user:users){
bulkRequest.add(
new IndexRequest("test2")
.id(""+i++)
.source(JSON.toJSONString(user), XContentType.JSON)
);
}
try {
//發(fā)送請(qǐng)求
BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
//獲取是否失敗標(biāo)志
System.out.println(bulk.hasFailures());
} catch (IOException e) {
e.printStackTrace();
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis-plus分頁(yè)如何接收前端參數(shù)limit和page
這篇文章主要介紹了mybatis-plus分頁(yè)如何接收前端參數(shù)limit和page,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Spring?Retry優(yōu)雅地實(shí)現(xiàn)方法重試機(jī)制
Spring?Retry?是?Spring?提供的一個(gè)模塊,它可以幫助我們以聲明式的方式為方法添加重試功能,從而提升系統(tǒng)的健壯性和可用性,下面我們就來(lái)看看如何使用Spring?Retry實(shí)現(xiàn)方法重試機(jī)制吧2025-06-06
Spring?Boot多個(gè)定時(shí)任務(wù)阻塞問(wèn)題的解決方法
在日常的項(xiàng)目開(kāi)發(fā)中,往往會(huì)涉及到一些需要做到定時(shí)執(zhí)行的代碼,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot多個(gè)定時(shí)任務(wù)阻塞問(wèn)題的解決方法,需要的朋友可以參考下2022-01-01
List對(duì)象去重和按照某個(gè)字段排序的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇List對(duì)象去重和按照某個(gè)字段排序的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Java調(diào)用Python腳本傳遞數(shù)據(jù)并返回計(jì)算結(jié)果
實(shí)際工程項(xiàng)目中可能會(huì)用到Java和python兩種語(yǔ)言結(jié)合進(jìn)行,這樣就會(huì)涉及到一個(gè)問(wèn)題,Java如何調(diào)用Python腳本,感興趣的可以了解一下2021-05-05
Java字符串寫(xiě)入文件三種方式的實(shí)現(xiàn)
這篇文章主要介紹了 Java字符串寫(xiě)入文件三種方式的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-06-06

