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;

    }

}

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容