springboot 整合 ElasticSearch

安裝es

springboot 整合ES

 引入pom

         <!-- jest 版本控制使用 springboot 的-->
        <dependency>
            <groupId>io.searchbox</groupId>
            <artifactId>jest</artifactId>
        </dependency>
        <!-- elasticsearch -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        </dependency>

配置yml

# 配置 jest
spring:
  application:
    # 應用程序名稱,後面會在消費者中用到
    name: @build.finalName@
  #yml elasticsearch部分
  elasticsearch:
    jest:
      uris: http://192.168.233.129:9200
      #讀取超時時間  單位 (ms)
      read-timeout: 5000
      #連接超時 3000 ms
      connection-timeout: 3000
      # 登陸名密碼
      username:
      password:
      proxy:
        host:
        port:
      # 感覺這個參數是 ES 事務的意思 , 但是不確定 ,需要研究
      multi-threaded: true

注入 jest 並且構建JestService

package colon.cloud.search.service;

import io.searchbox.core.SearchResult;
import java.util.List;

/**
 * Created by conlon on 2019-05-17
 */
public interface JestService {

    public boolean createIndex(String indexName) throws Exception;

    public boolean createIndexMapping(String source , String indexName , String typeName) throws Exception;

    public String getIndexMapping(String indexName , String typeName) throws Exception;

    public boolean index(List<Object> objs , String indexName , String typeName) throws Exception;

    public String search(String query , String indexName , String typeName) throws Exception;

    SearchResult searchResult(String query, String indexName, String typeName) throws Exception;

    public Double count(String query , String indexName , String typeName) throws Exception;

    public String get(String id , String indexName , String typeName) throws Exception;

    public boolean deleteIndex(String indexName) throws Exception;

    public boolean delete(String id , String indexName , String typeName) throws Exception;

    public void closeJestClient() throws Exception;

    public <T> Boolean elasticInsert(T t , String indexName , String typeName , String uniqueId) throws Exception;

}

 jest實現

package colon.cloud.search.service.Impl;

import colon.cloud.search.service.JestService;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.Bulk;
import io.searchbox.core.BulkResult;
import io.searchbox.core.Count;
import io.searchbox.core.CountResult;
import io.searchbox.core.Delete;
import io.searchbox.core.DocumentResult;
import io.searchbox.core.Get;
import io.searchbox.core.Index;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import io.searchbox.indices.CreateIndex;
import io.searchbox.indices.DeleteIndex;
import io.searchbox.indices.mapping.GetMapping;
import io.searchbox.indices.mapping.PutMapping;
import java.io.IOException;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class JestServiceImpl implements JestService {

    private final Logger logger = LoggerFactory.getLogger(JestServiceImpl.class);

    @Autowired
    private JestClient jestClient;


    /**
     * 創建索引
     */
    @Override
    public boolean createIndex(String indexName) throws Exception {
        JestResult jr = jestClient.execute(new CreateIndex.Builder(indexName).build());
        return jr.isSucceeded();
    }

    /**
     * Put映射
     */
    @Override
    public boolean createIndexMapping(String source, String indexName, String typeName) throws Exception {

        PutMapping putMapping = new PutMapping.Builder(indexName, typeName, source).build();
        JestResult jr = jestClient.execute(putMapping);
        return jr.isSucceeded();
    }

    /**
     * Get映射
     */
    @Override
    public String getIndexMapping(String indexName, String typeName) throws Exception {
        GetMapping getMapping = new GetMapping.Builder().addIndex(indexName).addType(typeName).build();
        JestResult jr = jestClient.execute(getMapping);
        return jr.getJsonString();
    }

    /**
     * 索引文檔
     */
    @Override
    public boolean index(List<Object> objs, String indexName, String typeName) throws Exception {
        Bulk.Builder bulk = new Bulk.Builder().defaultIndex(indexName).defaultType(typeName);
        for (Object obj : objs) {
            Index index = new Index.Builder(obj).build();
            bulk.addAction(index);
        }
        BulkResult br = jestClient.execute(bulk.build());
        return br.isSucceeded();
    }

    /**
     * 搜索文檔
     *
     * @param query 理解成查詢json字符串
     */
    @Override
    public String search(String query, String indexName, String typeName) throws Exception {

        Search search = new Search.Builder(query)
                .addIndex(indexName)
                .addType(typeName)
                .build();
        SearchResult execute = jestClient.execute(search);
        return execute.getJsonString();
    }



    /**
     * 搜索文檔
     *
     * @param query 理解成查詢json字符串
     */
    @Override
    public SearchResult searchResult(String query, String indexName, String typeName) throws Exception {

        Search search = new Search.Builder(query)
                .addIndex(indexName)
                .addType(typeName)
                .build();
        return jestClient.execute(search);
    }

    /**
     * Count文檔
     */
    @Override
    public Double count(String query, String indexName, String typeName) throws Exception {

        Count count = new Count.Builder()
                .addIndex(indexName)
                .addType(typeName)
                .query(query)
                .build();
        CountResult results = jestClient.execute(count);
        return results.getCount();
    }

    /**
     * Get文檔
     */
    @Override
    public String get(String id, String indexName, String typeName) throws Exception {
        Get get = new Get.Builder(indexName, id).type(typeName).build();
        JestResult execute = jestClient.execute(get);
        return execute.getJsonString();
    }

    /**
     * Delete索引
     */
    @Override
    public boolean deleteIndex(String indexName) throws Exception {
        JestResult jr = jestClient.execute(new DeleteIndex.Builder(indexName).build());
        return jr.isSucceeded();
    }

    /**
     * Delete文檔
     */
    @Override
    public boolean delete(String id, String indexName, String typeName) throws Exception {
        DocumentResult dr = jestClient.execute(new Delete.Builder(id).index(indexName).type(typeName).build());
        return dr.isSucceeded();
    }

    /**
     * 關閉JestClient客戶端
     */
    @Override
    public void closeJestClient() throws Exception {
        if (jestClient != null) {
            jestClient.shutdownClient();
        }
    }

    /**
     * 插入參數
     */
    @Override
    public <T> Boolean elasticInsert(T t, String indexName, String typeName, String uniqueId) {
        Index index = new Index.Builder(t).id(uniqueId).refresh(true).index(indexName).type(typeName).build();
        try {
            JestResult result = jestClient.execute(index);
            if (result != null && result.isSucceeded()) {
                logger.info("新增參數成功" + result);
                return true;
            } else {
                logger.error("新增參數失敗==> result " + result);
                return false;
            }
        } catch (IOException e) {
            logger.error("新增參數失敗==>" + e.getMessage());
            return false;
        }
    }

}

基本使用 

 

import colon.cloud.search.SearchApplication;
import colon.cloud.search.entity.LogPilotModel;
import colon.cloud.search.service.JestService;
import com.alibaba.fastjson.JSON;
import io.searchbox.core.SearchResult;
import io.searchbox.core.SearchResult.Hit;
import io.searchbox.core.search.aggregation.MetricAggregation;
import java.util.List;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SearchApplication.class)
@Slf4j
public class SearchTest {

    @Autowired
    private JestService jestService;

    private String index_01 = "catalina-2020.03.21";
    private String type_01 = "doc";

    @Test
    public void test01() {
        try {
            String indexMapping = jestService.getIndexMapping(index_01, type_01);
            log.info("indexMapping=={}" + indexMapping);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test02() {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.queryStringQuery("logback").field("message"));
        log.info("searchSourceBuilder===>"+searchSourceBuilder.toString());
        String search = null;
        try {
            search = jestService.search(searchSourceBuilder.toString(), index_01, type_01);
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info(search);
    }

    /**
     * 處理返回對應source 的實體信息 並且分頁
     * @Author:Mr conlon
     * @create 202/3/31 11:24
     */
    @Test
    public void test03() {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.queryStringQuery("logback").field("message")).size(10).from(2);
        log.info("searchSourceBuilder===>"+searchSourceBuilder.toString());

        try {
            SearchResult searchResult = jestService.searchResult(searchSourceBuilder.toString(), index_01, type_01);
            List<Hit<LogPilotModel, Void>> hits = searchResult.getHits(LogPilotModel.class);
            for (Hit<LogPilotModel, Void> hit : hits) {
                LogPilotModel pilotModel = hit.source;
                System.out.println("====>"+pilotModel.getMessage());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

 

 

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