SpringBoot實現(xiàn)elasticsearch索引操作的代碼示例
RestHighLevelClient
是 Elasticsearch
官方提供的Java高級客戶端,用于與Elasticsearch
集群進行交互和執(zhí)行各種操作。
主要特點和功能如下:
強類型:RestHighLevelClient 提供了強類型的 API,可以在編碼過程中獲得更好的類型安全性和 IDE 支持。
兼容性:RestHighLevelClient 是 Elasticsearch 官方推薦的 Java 客戶端,在 Elasticsearch 版本升級時會保證與 Elasticsearch 的兼容性。
高級功能:RestHighLevelClient 支持 Elasticsearch 的所有高級功能,例如索引、搜索、聚合、分頁、批量操作、文檔更新、刪除等操作。
異步執(zhí)行:RestHighLevelClient 還支持異步方式執(zhí)行操作,可以通過提供的異步回調(diào)方法處理返回結(jié)果。
索引管理:RestHighLevelClient 提供了索引管理相關(guān)的 API,包括創(chuàng)建索引、映射定義、設(shè)置索引的分片和副本等操作。
搜索與聚合:RestHighLevelClient 支持復雜的搜索和聚合操作,可以使用查詢條件、過濾條件、排序、范圍查詢等來獲取所需的數(shù)據(jù)。
安全認證:RestHighLevelClient 支持配置安全認證信息,例如提供用戶名和密碼進行身份驗證。
執(zhí)行配置:RestHighLevelClient 可以配置連接超時、請求超時、重試策略等執(zhí)行參數(shù),以滿足特定的需求和優(yōu)化性能。
RestHighLevelClient是一個功能強大的Java客戶端,可以輕松地與Elasticsearch集群進行交互,并支持許多高級功能和配置選項。
來實操吧…
0. 引入依賴
<dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.12.1</version> </dependency>
1. 實例創(chuàng)建與關(guān)閉
private RestHighLevelClient client; void setUp() { this.client = new RestHighLevelClient(RestClient.builder( HttpHost.create("http://IP:9200") )); } void tearDown() throws IOException { this.client.close(); }
2. 創(chuàng)建索引
@RequestMapping("/create") public String createHotelIndex() throws IOException { setUp(); // 1.創(chuàng)建Request對象 "name" 是需要創(chuàng)建的索引名 一般在項目中只創(chuàng)建一次 所以這里是寫死的 CreateIndexRequest request = new CreateIndexRequest("name"); // 2.準備請求的參數(shù):DSL語句 request.source(MAPPING_TEMPLATE, XContentType.JSON); // 3.發(fā)送請求 CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); tearDown(); return createIndexResponse.isAcknowledged() ? "創(chuàng)建成功" : "創(chuàng)建失敗"; }
3. 測試索引庫存在不存在
@RequestMapping("/testExistsHotelIndex/{indexName}") public String testExistsHotelIndex(@PathVariable("indexName") String indexName) throws IOException { setUp(); // 1.創(chuàng)建Request對象 GetIndexRequest request = new GetIndexRequest(indexName); // 2.發(fā)送請求 boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); tearDown(); return exists ? "索引庫已經(jīng)存在!" : "索引庫不存在!"; }
4. 刪除索引庫
@RequestMapping("/testDeleteHotelIndex") void testDeleteHotelIndex() throws IOException { setUp(); // 1.創(chuàng)建Request對象 DeleteIndexRequest request = new DeleteIndexRequest("索引名稱"); // 2.發(fā)送請求 client.indices().delete(request, RequestOptions.DEFAULT); tearDown(); }
5. 遍歷導入數(shù)據(jù)
不建議遍歷導入,這樣效率低低
@RequestMapping("/addAll") public List<HotelDoc> addAll() throws IOException { List<Hotel> list = hotelService.list(); List<HotelDoc> docList = list.stream().map(p -> new HotelDoc(p)).collect(Collectors.toList()); setUp(); for (HotelDoc hotelDoc : docList) { String jsonString = JSON.toJSONString(hotelDoc); // 1.準備Request對象 IndexRequest request = new IndexRequest("索引名稱").id(hotelDoc.getId().toString()); // 2.準備Json文檔 request.source(jsonString, XContentType.JSON); // 3.發(fā)送請求 IndexResponse index = client.index(request, RequestOptions.DEFAULT); System.out.println(hotelDoc.getName() + ":" + index.status()); } tearDown(); return null; }
6. 批量導入數(shù)據(jù)(推薦)
@RequestMapping("/testBulkRequest") public void testBulkRequest() throws IOException { List<Hotel> hotels = hotelService.list(); setUp(); // 1.創(chuàng)建Request BulkRequest request = new BulkRequest(); // 2.準備參數(shù),添加多個新增的Request for (Hotel hotel : hotels) { // 2.1.轉(zhuǎn)換為文檔類型HotelDoc HotelDoc hotelDoc = new HotelDoc(hotel); // 2.2.創(chuàng)建新增文檔的Request對象 request.add(new IndexRequest("索引名稱") .id(hotelDoc.getId().toString()) .source(JSON.toJSONString(hotelDoc), XContentType.JSON)); } // 3.發(fā)送請求 client.bulk(request, RequestOptions.DEFAULT); tearDown(); }
到此這篇關(guān)于SpringBoot實現(xiàn)elasticsearch索引操作的代碼示例的文章就介紹到這了,更多相關(guān)SpringBoot elasticsearch索引操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 高并發(fā)中volatile的實現(xiàn)原理
這篇文章主要介紹了java 高并發(fā)中volatile的實現(xiàn)原理的相關(guān)資料,在多線程并發(fā)編程中synchronized和Volatile都扮演著重要的角色,Volatile是輕量級的synchronized,它在多處理器開發(fā)中保證了共享變量的“可見性”,需要的朋友可以參考下2017-03-03基于logback 實現(xiàn)springboot超級詳細的日志配置
java web 下有好幾種日志框架,比如:logback,log4j,log4j2(slj4f 并不是一種日志框架,它相當于定義了規(guī)范,實現(xiàn)了這個規(guī)范的日志框架就能夠用 slj4f 調(diào)用)。這篇文章主要介紹了基于logback springboot超級詳細的日志配置,需要的朋友可以參考下2019-06-06JAVA通過HttpClient發(fā)送HTTP請求的方法示例
本篇文章主要介紹了JAVA通過HttpClient發(fā)送HTTP請求的方法示例,詳細的介紹了HttpClient使用,具有一定的參考價值,有興趣的可以了解一下2017-09-09Java基于解釋器模式實現(xiàn)定義一種簡單的語言功能示例
這篇文章主要介紹了Java基于解釋器模式實現(xiàn)定義一種簡單的語言功能,簡單描述了解釋器模式的概念、功能及Java使用解釋器模式定義一種簡單語言的相關(guān)實現(xiàn)與使用技巧,需要的朋友可以參考下2018-05-05Java Spring WEB應(yīng)用實例化如何實現(xiàn)
這篇文章主要介紹了Java Spring WEB應(yīng)用實例化如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12java應(yīng)用cpu飆升(超過100%)故障排查步驟
在Java并發(fā)編程計算密集型要進行大量的計算、邏輯判斷等操作,消耗CPU資源,比如計算圓周率、對視頻進行高清解碼等等,下面這篇文章主要給大家介紹了關(guān)于java應(yīng)用cpu飆升(超過100%)故障排查步驟的相關(guān)資料,需要的朋友可以參考下2023-06-06