springboot2.2.5+elasticsearch7.6

'#'引入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;

    }

}

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容