'#'引入pom依赖
```
<properties>
<java.version>1.8
<elasticsearch.version>7.6.0
<druid.version>1.1.14
</properties>
<groupId>org.elasticsearch
<artifactId>elasticsearch
<version>${elasticsearch.version}
<groupId>org.elasticsearch.client
<artifactId>elasticsearch-rest-high-level-client
<version>${elasticsearch.version}
es接口类
package com.es.es7;
import java.util.List;
import java.util.Map;
/**
* elasticsearch搜索服务
* @author dyg
*/
public interface IEsSearchService {
/**
* 判断索引index是否存在
* @param index
* @return
*/
boolean checkIndex(String index);
/**
* 删除索引
* @param index
* @return
*/
boolean deleteIndex(String index);
/**
* 创建索引
* @return
*/
StringcreateIndex(String index,boolean force);
StringcreateMapping(String index);
void saveDocument(String index);
int saveDocumentByIndex(List seSearchList,String index);
MapsearchGoodByQuery(String index, EsEntity queryData, int pageNum, int pageSize);
}
es实现类
package com.es.es7;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.CountRequest;
import org.elasticsearch.client.core.CountResponse;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.PutMappingRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.*;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* es服务
* @author dyg
*/
@Service
public class EsSearchServiceImplimplements IEsSearchService {
private static RestHighLevelClientclient;
public static RestHighLevelClientgetClient() {
if (null ==client) {
client =new RestHighLevelClient(RestClient.builder(
new HttpHost("localhost", 9200,"http")
));
System.out.println("我被初始化了");
}
return client;
}
@Override
public boolean checkIndex(String index) {
GetIndexRequest request =new GetIndexRequest(index);
try {
return getClient().indices().exists(request,RequestOptions.DEFAULT);
}catch (IOException e) {
e.printStackTrace();
return false;
}
}
@Override
public boolean deleteIndex(String index) {
DeleteIndexRequest request =new DeleteIndexRequest(index);
try {
AcknowledgedResponse response =getClient().indices().delete(request, RequestOptions.DEFAULT);
if (response.isAcknowledged()) {
return true;
}
}catch (IOException e) {
e.printStackTrace();
return false;
}
return false;
}
@Override
public StringcreateIndex(String index,boolean force) {
String msg ="";
boolean f = checkIndex(index);
if (f) {
if (force) {
deleteIndex(index);
}else {
msg ="索引已经存在";
return msg;
}
}
CreateIndexRequest request =new CreateIndexRequest(index);
try {
CreateIndexResponse response =getClient().indices().create(request, RequestOptions.DEFAULT);
if (response.isAcknowledged()) {
msg ="创建成功";
}else {
msg ="创建失败";
}
}catch (IOException e) {
e.printStackTrace();
msg = e.getMessage();
}
return msg;
}
@Override
public StringcreateMapping(String index) {
String msg ="";
XContentBuilder builder;
try {
builder = XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("good_id").field("type","long").field("index",true).endObject()
.startObject("createTime").field("type","date").field("index",true).field("format","strict_date_optional_time||epoch_millis").endObject()
.startObject("name").field("type","text").field("index",true).field("analyzer", "ik_max_word").endObject()
.startObject("name_scrapy").field("type","text").field("index",true).field("analyzer", "ik_max_word").endObject()
.startObject("code").field("type","keyword").field("index",true).endObject()
.startObject("keyword").field("type","text").field("index",true).field("analyzer", "ik_max_word").endObject()
.startObject("category").field("type","text").field("index",true).field("analyzer", "ik_max_word").endObject()
.startObject("model").field("type","text").field("index",true).field("analyzer", "ik_max_word").endObject()
.startObject("lead_free").field("type","text").field("index",true).field("analyzer", "ik_max_word").endObject()
.startObject("note").field("type","text").field("index",true).field("analyzer", "ik_max_word").endObject()
.endObject().endObject();
PutMappingRequest request =new PutMappingRequest(index);
request.source(builder);
AcknowledgedResponse response =getClient().indices().putMapping(request, RequestOptions.DEFAULT);
if (response.isAcknowledged()) {
msg ="创建成功";
}else {
msg ="创建失败";
}
}catch (IOException e) {
e.printStackTrace();
msg = e.getMessage();
}
return msg;
}
@Override
public void saveDocument(String index) {
BulkRequest bulkRequest =new BulkRequest();
List> list =new ArrayList<>();
Map mp =new HashMap<>();
mp.put("good_id",5492078);
mp.put("code","926F105492078");
mp.put("name","卡边缘连接器");
list.add(mp);
mp =new HashMap<>();
mp.put("good_id",5492146);
mp.put("code","926F105492146");
mp.put("name","卡边缘连接器");
list.add(mp);
for (Map mpt : list) {
bulkRequest.add(new IndexRequest(index).source(mpt));
}
bulkRequest.timeout("10m");
try {
getClient().bulk(bulkRequest, RequestOptions.DEFAULT);
}catch(IOException e) {
e.printStackTrace();
}
}
@Override
public int saveDocumentByIndex(List seSearchList,String index) {
BulkRequest bulkRequest =new BulkRequest();
Map map =new HashMap<>();
int count =0;
for (EsEntity entity : seSearchList) {
Date date =new Date();
map.put("id", entity.getId());
map.put("createTime",date);
map.put("name",entity.getName());
map.put("name_scrapy",entity.getNameScrapy());
map.put("code",entity.getCode());
map.put("keyword",entity.getKeyword());
map.put("category",entity.getCategory());
map.put("model",entity.getModel());
map.put("lead_free",entity.getLeadFree());
map.put("note",entity.getNote());
bulkRequest.add(new IndexRequest(index).source(map));
bulkRequest.timeout("10m");
try {
getClient().bulk(bulkRequest, RequestOptions.DEFAULT);
count++;
}catch (IOException e) {
e.printStackTrace();
}
}
return count;
}
@Override
public MapsearchGoodByQuery(String index, EsEntity queryData, int pageNum, int pageSize) {
SearchRequest searchRequest =new SearchRequest();
CountRequest countRequest =new CountRequest();
countRequest.indices(index).source(sourceBuilder(queryData,pageNum,pageSize));
long total =0L;
try{
CountResponse countResponse =getClient().count(countRequest,RequestOptions.DEFAULT);
total = countResponse.getCount();
}catch (IOException e) {
e.printStackTrace();;
}
searchRequest.indices(index).source(sourceBuilder(queryData, pageNum, pageSize));
List> list = searchResult(searchRequest);
Map listMap =new HashMap<>();
listMap.put("list",list);
listMap.put("total",total);
return listMap;
}
public List>searchResult(SearchRequest searchRequest) {
List> list =new ArrayList<>();
List fieldList =new ArrayList<>();
fieldList.add("name");
SearchResponse searchResponse;
try {
searchResponse =getClient().search(searchRequest, RequestOptions.DEFAULT);
RestStatus status = searchResponse.status();
TimeValue took = searchResponse.getTook();
Boolean terminatedEarly = searchResponse.isTerminatedEarly();
boolean timeOut = searchResponse.isTimedOut();
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits) {
Map sourceAsMap = hit.getSourceAsMap();
list.add(sourceAsMap);
}
}catch (IOException e) {
e.printStackTrace();
}
return list;
}
public SearchSourceBuildersourceBuilder(EsEntity queryData, int pageNum, int pageSize) {
SearchSourceBuilder searchSourceBuilder =new SearchSourceBuilder();
//开始搜索的位置
searchSourceBuilder.from((pageNum-1)*pageSize);
//搜索结果的数量大小
searchSourceBuilder.size(pageSize);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//设置超时时间
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
//按照名称查询
if (!StringUtils.isEmpty(queryData.getName())) {
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", queryData.getName());
//嵌套查询,满足其一即可
boolQueryBuilder.should(matchQueryBuilder);
}
if (!StringUtils.isEmpty(queryData.getCode())) {
TermQueryBuilder queryBuilder = QueryBuilders.termQuery("code", queryData.getCode());
boolQueryBuilder.should(queryBuilder);
}
//此为高亮字段,作为封装类方法在这里被引用
//searchSourceBuilder.highlighter(highlight());
//需要查询出来的字段
String[] includeFields =new String[]{"id", "name", "keyword", "code", "model"};
//不需要的字段
String[] excludeFields =new String[]{""};
searchSourceBuilder.fetchSource(includeFields, excludeFields);
searchSourceBuilder.query(boolQueryBuilder);
return searchSourceBuilder;
}
public HighlightBuilderhighlight() {
//设置高亮
HighlightBuilder highlightBuilder =new HighlightBuilder();
//设置高亮的前缀和后缀
String preTags ="<em class='titleColor' style='color: #f60'>";
String postTags ="</em>";
highlightBuilder.preTags(preTags);
highlightBuilder.postTags(postTags);
HighlightBuilder.Field pname =new HighlightBuilder.Field("name");
//highlightBuilder.field(name);
return highlightBuilder;
}
}
```