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();
}
}
}