SpringBoot整合(ES)ElasticSearch7.8實踐
SpringBoot整合ElasticSearch7.8
所有的教程都參考于官方文檔,這里給大家說明文檔位置,搜索elasticsearch官網(wǎng)的Docs界面,找到ElasticSearch Client這個選項,圖中也有位置,根據(jù)圖中的位置找就行了。
前提是要安裝好ES,挺簡單的,這里就不說了。
添加依賴
根據(jù)官方文檔導(dǎo)入對應(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項目
SpringBoot中已經(jīng)有了starter,直接選擇NoSQL里面導(dǎo)入啟動依賴就可以了
創(chuàng)建配置類
@Configuration public class ElasticConfig { @Bean public RestHighLevelClient getRestHighLevelClient(){ RestHighLevelClient client = new RestHighLevelClient( //如果是集群再配置多個 RestClient.builder(new HttpHost("127.0.0.1",9200,"http")) ); return client; } }
測試案例
創(chuàng)建索引
查看官方手冊
可以看到很多的API,我們試試索引API,點擊Index APIs
第一個是創(chuàng)建索引的簡單方式,創(chuàng)建完成后還要發(fā)送指令過去,發(fā)送方式拉到最下就可以看到一個同步和異步的發(fā)送,我們使用同步就行了。
我們直接在test目錄測試下
@SpringBootTest class ElasticsearchDemoApplicationTests { @Test void contextLoads() { } @Qualifier("getRestHighLevelClient") @Autowired private RestHighLevelClient client; /** * 創(chuàng)建索引 */ @Test public void test1(){ //注意索引名要小寫 CreateIndexRequest request = new CreateIndexRequest("springboot_es_test1"); try { CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); } } }
如果執(zhí)行不報錯,那就可以打開可視化工具查看或者kibana去查看索引創(chuàng)建情況
獲取索引
我們也可以直接通過java代碼獲取索引去檢測,這個代碼也是可以從官方獲取的
/** * 獲取索引 */ @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)建索引并加入對象的屬性和值
1、查看官方案例
2、創(chuàng)建實體類
這里使用的lombok,不會使用的小伙伴手動添加get/set全參構(gòu)造和無參構(gòu)造方法
@Data @NoArgsConstructor @AllArgsConstructor public class User { private String username; private Integer age; }
3、測試方法
/** * 測試對象的操作 */ @Test public void test3(){ //創(chuàng)建對象 User user = new User("測試", 13); IndexRequest request = new IndexRequest("posts"); request.id("1"); //對象轉(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ù)據(jù),比如從數(shù)據(jù)庫中、消息隊列或者緩存中獲取數(shù)據(jù)插入等等,ES也提供了批量插入的方法,BulkRequest類。
/** * 設(shè)置批量插入 */ @Test public void test4(){ //創(chuàng)建批量請求 BulkRequest bulkRequest = new BulkRequest(); //超時時間 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ā)送請求 BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT); //獲取是否失敗標(biāo)志 System.out.println(bulk.hasFailures()); } catch (IOException e) { e.printStackTrace(); } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis-plus分頁如何接收前端參數(shù)limit和page
這篇文章主要介紹了mybatis-plus分頁如何接收前端參數(shù)limit和page,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Spring?Retry優(yōu)雅地實現(xiàn)方法重試機(jī)制
Spring?Retry?是?Spring?提供的一個模塊,它可以幫助我們以聲明式的方式為方法添加重試功能,從而提升系統(tǒng)的健壯性和可用性,下面我們就來看看如何使用Spring?Retry實現(xiàn)方法重試機(jī)制吧2025-06-06Spring?Boot多個定時任務(wù)阻塞問題的解決方法
在日常的項目開發(fā)中,往往會涉及到一些需要做到定時執(zhí)行的代碼,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot多個定時任務(wù)阻塞問題的解決方法,需要的朋友可以參考下2022-01-01Java調(diào)用Python腳本傳遞數(shù)據(jù)并返回計算結(jié)果
實際工程項目中可能會用到Java和python兩種語言結(jié)合進(jìn)行,這樣就會涉及到一個問題,Java如何調(diào)用Python腳本,感興趣的可以了解一下2021-05-05