當前位置:
                    首頁 >
                            前端技术
>                            javascript
>内容正文                
                        
                    javascript
用SpringBoot整合ES数据库基础
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                用SpringBoot整合ES数据库基础
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                一、SpringBoot整合ES數據庫
1、配置原生的依賴。
<properties><java.version>1.8</java.version><!-- 自己定義es版本依賴,保證和本地- -致--><elasticsearch.version>7.6.2</elasticsearch.version> </properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- JODA Time --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.5</version></dependency><!-- ELasticsearch --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>7.6.2</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><!-- required by elasticsearch --><groupId>org.elasticsearch.plugin</groupId><artifactId>transport-netty4-client</artifactId><version>7.6.2</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><version>2.3.3.RELEASE</version></dependency> </dependencies> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins> </build>2、構建對象。
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http"),new HttpHost("localhost", 9201, "http"))); //記得關閉 client.close();3、分析對應的方法。
@Controller 控制器(注入服務)
 用于標注控制層,相當于struts中的action層
 @Service 服務(注入dao)
 用于標注服務層,主要用來進行業務的邏輯處理
 @Repository(實現dao訪問)
 用于標注數據訪問層,也可以說用于標注數據訪問組件,即DAO組件
 @Component (把普通pojo實例化到spring容器中,相當于配置文件中的 )
 泛指各種組件,就是說當我們的類不屬于各種歸類的時候(不屬于@Controller、@Services等的時候),我們就可以使用@Component來標注這個類。
-  @Data : 注解在類上, 為類提供讀寫屬性, 此外還提供了 equals()、hashCode()、toString() 方法 
-  @Getter/@Setter : 注解在類上, 為類提供讀寫屬性 
-  @ToString : 注解在類上, 為類提供 toString() 方法 
-  @Slf4j : 注解在類上, 為類提供一個屬性名為 log 的 log4j 的日志對象 
-  @Log4j : 注解在類上, 為類提供一個屬性名為 log 的 log4j 的日志對象 
 3、構建實體類和測試類 //User類 @Data @Component public class User {private String name;private int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;} }//測試程序 package com.www.es.springboot.demo;import com.alibaba.fastjson.JSON; import com.www.es.springboot.demo.pojo.User; import com.www.es.springboot.demo.utils.ESconst; import org.elasticsearch.action.DocWriteRequest; import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.delete.DeleteRequest; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.get.GetRequest; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.action.update.UpdateRequest; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.client.indices.CreateIndexResponse; import org.elasticsearch.client.indices.GetIndexRequest; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.query.MatchAllQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.FetchSourceContext; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.concurrent.TimeUnit;@SpringBootTest class DemoApplicationTests {@Autowiredprivate RestHighLevelClient restHighLevelClient;//面向對象來操作@Autowired@Qualifier("restHighLevelClient" )private RestHighLevelClient client;//測試索引的創建Request@Testvoid testCreateIndex() throws IOException {// 1、創建索引請求CreateIndexRequest request = new CreateIndexRequest("index1" );// 2、客戶端執行請求IndicesClient,請求后獲得響應CreateIndexResponse createIndexResponse =client.indices().create(request, RequestOptions.DEFAULT);System.out.println(createIndexResponse);}//測試獲取索引@Testvoid testExistIndex() throws IOException {GetIndexRequest request = new GetIndexRequest( "index");boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists);}//測試刪除索引@Testvoid testDeleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("index1");//刪尉AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);System.out.println(delete.isAcknowledged());}//測試添加文檔@Testvoid testAddDocument() throws IOException {User user = new User("唐三藏",25);//創建請求IndexRequest indexRequest = new IndexRequest("index");indexRequest.id("1");indexRequest.timeout(TimeValue.timeValueSeconds(1));indexRequest.timeout("1s");//將我們的數據放入請求indexRequest.source(JSON.toJSONString(user), XContentType.JSON);//客戶端發送請求IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);//獲取響應的結果System.out.println(indexResponse.toString());System.out.println(indexResponse.status());}//獲取文檔,判斷是否存在get /index/doc/@Testvoid testIsExists() throws IOException {GetRequest getRequest = new GetRequest( "index", "1");//不獲取返回的_ source 的上下文了//getRequest.fetchSourceContext (new FetchSourceContext(false));//getRequest.storedFields("_none_");boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);System.out.println(exists);GetResponse getResponse = client.get(getRequest,RequestOptions.DEFAULT);System.out.println(getResponse .getSourceAsString()); //打印文檔的內容System.out.println(getResponse);}//獲取文檔的信息@Testvoid testGetDocuments() throws IOException {GetRequest getRequest = new GetRequest( "index", "1");GetResponse getResponse = client.get(getRequest,RequestOptions.DEFAULT);System.out.println(getResponse.getSourceAsString()); //打印文檔的內容System.out.println(getResponse);}//更新文檔的信息@Testvoid testUpdateDocuments() throws IOException {UpdateRequest updateRequest = new UpdateRequest("index", "2");updateRequest.timeout("1s");User user = new User("殺阡陌", 18);UpdateRequest doc = updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);System.out.println(doc);System.out.println(updateResponse.status());System.out.println(updateResponse);}//刪除文檔信息@Testvoid testDeleteDocuments() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("index", "2");deleteRequest.timeout("1s");DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());System.out.println(deleteRequest);}// 特殊的,真的項目一般都會批量插入數據!@Testvoid testBulkRequest() throws IOException {BulkRequest bulkRequest = new BulkRequest();bulkRequest.timeout("10s");ArrayList<User> userList = new ArrayList<>();userList.add(new User("木sd1",3));userList.add(new User("木s2",4));userList.add(new User("木d3",5));userList.add(new User("木e4",6));userList.add(new User("木m5",7));userList.add(new User("木g6",8));userList.add(new User("木x7",9));// 用下迭代器/*for(int i = 0 ; i < userList.size();i++){bulkRequest.add(new IndexRequest("index").id(""+(i+1)).source(JSON.toJSONString(userList.get(i)), XContentType.JSON));}*/for(Iterator<User> user = userList.iterator(); user.hasNext();){System.out.println(user);/*System.out.println(user.next().getClass().getName());System.out.println(user.next());*/bulkRequest.add(new IndexRequest("index").source(JSON.toJSONString(user.next()), XContentType.JSON));}BulkResponse bulkItemResponses = client.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println(bulkItemResponses.hasFailures());}// 搜索查詢// SearchRequest搜索請求// SearchSourceBuiLder條件構造// HighlightBuiLder構建高亮// TermQueryBuilder精確查詢// MatchAlLQueryBuiLder// xxx QueryBuilder對應我們剛才看到的命令!@Testvoid testSearch() throws IOException {SearchRequest searchRequest = new SearchRequest(ESconst.ES_DATA_INDEX);//構建搜索條件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();final HighlightBuilder highlightBuilder = new HighlightBuilder();SearchSourceBuilder highlighter = sourceBuilder.highlighter(highlightBuilder);System.out.println(highlighter);// 查詢條件,我們可以使用 QueryBuilders 工具來實現// QueryBuilders.termQuery精確// QueryBuilders.matchAllQuery()匹配所有TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", "3");MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();//sourceBuilder.query(termQueryBuilder);sourceBuilder.query(matchAllQueryBuilder);searchRequest.source(sourceBuilder);sourceBuilder.timeout(new TimeValue(120, TimeUnit.SECONDS));SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(searchResponse.getHits().getHits()));System.out.println("=========================");for(SearchHit documentFields:searchResponse.getHits().getHits()){System.out.println(documentFields.getSourceAsMap());}} }
總結
以上是生活随笔為你收集整理的用SpringBoot整合ES数据库基础的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 关闭 centos7 的滴滴声
- 下一篇: 【阿里天猫精灵专题】TB-02 RGB冷
