ElasticSearch(10)—SpringBoot集成ES

在這裏插入圖片描述

上一篇:ElasticSearch(9)—Rest風格
SpringBoot項目集成ES
一、引入依賴

   首先創建一個springboot項目,並勾選下圖中的一些基本依賴:

在這裏插入圖片描述
官方文檔es-client依賴

按照官方文檔,springboot項目集成es首先需要導入es客戶端,但是因爲在創建項目的時候勾選了elasticsearch的起步依賴,查看該起步依賴發現底層已經引用了高級客戶端 rest-high-level-client依賴。

在這裏插入圖片描述
然後在springboot項目的maven依賴中查看elasticsearch使用的依賴版本是6.8.7,
在這裏插入圖片描述
爲了保證我們導入的依賴版本與es版本一致,所以手動調整es依賴的版本號,在pom.xml文件中進行調整:
在這裏插入圖片描述

二、創建客戶端實例

在這裏插入圖片描述

@Configuration
public class ElasticSearchClientConfig {

  @Bean
  public RestHighLevelClient restHighLevelClient() {
    RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
        RestClient.builder(
            new HttpHost("127.0.0.1", 9200, "http")));
    //如果是集羣,則在此處可以new 多個HttpHost
	//new HttpHost("127.0.0.1", 9201, "http")));
    return restHighLevelClient;
  }
}

二、測試es-api的使用

在這裏插入圖片描述
1.創建一個索引
創建一個實體類,將文檔數據聲明在該實體類中:
在這裏插入圖片描述

package org.magic.esapi.entiy;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data//生成set get方法
@AllArgsConstructor//有參構造函數
@NoArgsConstructor//無參構造函數
public class User {

  private String name;

  private Integer age;

  private String address;

}

2. 創建客戶端實例

@Configuration
public class ElasticSearchClientConfig {

  @Bean
  public RestHighLevelClient restHighLevelClient() {
    RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
            //如果是集羣,則此處可以多new 幾個HttpHost
//            new HttpHost("localhost", 9200, "http"),
            new HttpHost("localhost", 9200, "http")));
    return client;
  }
}

3. 測試api的使用

以下api操作結果可是結合elasticsearch-head插件來查看操作的結果;

package org.magic.esapi;

import com.alibaba.fastjson.JSON;
import java.io.IOException;
import java.util.ArrayList;
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.GetIndexRequest;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.search.SearchHit;
import org.junit.jupiter.api.Test;
import org.magic.esapi.entiy.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;

@SpringBootTest
class EsApiApplicationTests {

  private static final String index_name = "user_info";


  @Autowired
  private RestHighLevelClient restHighLevelClient;

  @Autowired
  private ElasticsearchRestTemplate elasticsearchRestTemplate;

  /**
   * 創建一個索引庫
   *
   * @throws IOException
   */
  @Test
  void createIndex() throws IOException {
    boolean result = elasticsearchRestTemplate.createIndex("liqiang");
    System.out.println(result);
   /* CreateIndexRequest createIndexRequest = new CreateIndexRequest(index_name);
    CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
    //打印創建結果
    System.out.println(createIndexResponse.isAcknowledged());*/
  }

  /**
   * 判斷索引庫是否存在
   */
  @Test
  void searchIndex() throws IOException {
    GetIndexRequest request = new GetIndexRequest(index_name);
    boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
    System.out.println(exists);
  }

  /**
   * 刪除索引庫
   */
  @Test
  void removeIndex() throws IOException {

    DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(index_name);
    AcknowledgedResponse response = restHighLevelClient.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
    //打印刪除結果
    System.out.println(response.isAcknowledged());
  }

  /**
   * 創建文檔
   */
  @Test
  void createDoc() throws IOException {
    User user = new User("張三", 20, "北京市");
    IndexRequest indexRequest = new IndexRequest(index_name);
    indexRequest.id("1");
    indexRequest.timeout("1s");
    IndexRequest request = indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
    IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
    System.out.println(response.status());
  }

  /**
   * 查詢文檔
   */
  @Test
  void queryDoc() throws IOException {
    GetRequest getRequest = new GetRequest(index_name, "1");
    GetResponse response = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
    System.out.println(response.getSource());
  }

  /**
   * 修改文檔
   */
  @Test
  void updateDoc() throws IOException {
    UpdateRequest updateRequest = new UpdateRequest(index_name, "1");
    User user = new User("李四", 55, "成都市");
    updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
    updateRequest.timeout("1s");
    UpdateResponse response = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
    System.out.println(response.status());
  }

  /**
   * 刪除指定文檔
   */
  @Test
  void removeDoc() throws IOException {
    DeleteRequest deleteRequest = new DeleteRequest(index_name, "1");
    DeleteResponse response = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
    System.out.println(response.status());
  }

  /**
   * 批量插入文檔
   */
  @Test
  void bulkCreateDoc() throws IOException {
    BulkRequest bulkRequest = new BulkRequest();
    bulkRequest.timeout("10s");
    ArrayList<User> userList = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
      userList.add(new User("張三" + i, 25 + i, "成都" + i));
    }
    for (int i = 0; i < userList.size(); i++) {
      bulkRequest.add(new IndexRequest(index_name)
          .id(String.valueOf(i))
          .source(JSON.toJSONString(userList.get(i)), XContentType.JSON));
    }
    BulkResponse response = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
    System.out.println(response.status());
  }

  /**
   * 批量查詢文檔
   */
  @Test
  void queryDocList() throws IOException {
    SearchRequest searchRequest = new SearchRequest(index_name);

    /*


    //指定條件查詢
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    //查詢年齡爲25的index_info索引庫中的數據
    TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", 25);
    searchSourceBuilder.query(termQueryBuilder);
    searchRequest.source(searchSourceBuilder);
    SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    for (SearchHit hit : response.getHits()) {
      System.out.println(hit.getSourceAsString());
    }


     */

    //查詢索引庫中所有的文檔數據
    SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    for (SearchHit hit : response.getHits()) {
      System.out.println(hit.getSourceAsString());
    }
  }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章