栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SpringBoot使用ElasticSearch7.x

SpringBoot使用ElasticSearch7.x

导入Maven依赖

ES7.6文档:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.6/java-rest-high-getting-started.html


  org.springframework.boot
  spring-boot-starter-data-elasticsearch

进入到依赖中 查看SpringBoot 默认使用的ES版本


	org.elasticsearch.client
	transport
	${elasticsearch}

默认使用的7.9.3 版本

  org.elasticsearch
  elasticsearch
  7.9.3
  compile

修改默认的ES版本


    1.8
    7.6.2

配置ElastciSearch
@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("110.40.242.86", 9200, "http")));
        return client;
    }
}
API
package com.liuy.lmall;

import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.liuy.lmall.entity.UmsAdmin;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.Timevalue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Map;
import java.util.concurrent.TimeUnit;



@SpringBootTest
public class LmallApplicationTest {
    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

    @Test
    void testCreateIndex() throws IOException {
        //创建索引请求
        CreateIndexRequest request=new CreateIndexRequest("mall_index");
        //执行请求IndicesClient
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);
    }

    //索引所否存在
    @Test
    void testExistIndex() throws IOException {
        GetIndexRequest request=new GetIndexRequest("mall_index");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }
    //删除索引
    @Test
    void testdeleteIndex() throws IOException {
        DeleteIndexRequest request=new DeleteIndexRequest("mall_index");
        //删除
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

    //添加文档
    @Test
    void testAdddocument() throws IOException {
        UmsAdmin admin=new UmsAdmin("liuyt","123465");
        //创建请求
        IndexRequest request=new IndexRequest("mall_index");
        //规则 put /mall_index/_doc/1
        request.id("1");
        request.timeout(Timevalue.timevalueSeconds(1));
        request.timeout("1s");

        //数据放入请求 json
        request.source(JSONUtil.parse(admin), XContentType.JSON);
        //发送请求,获取响应结果
        IndexResponse index = client.index(request, RequestOptions.DEFAULT);
        System.out.println(index.toString());
        System.out.println(index.status());

    }

    //获取文档,判断是否存在get /index/doc/1
    @Test
    void testIsExist() throws IOException {
        GetRequest getRequest=new GetRequest("mall_index","1");
        //不获取返回的_source 的上下文  性能更快
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        getRequest.storedFields("_none_");


        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);

    }

    //获取文档信息
    @Test
    void testGetdocument() throws IOException {
        GetRequest getRequest=new GetRequest("mall_index","1");
        GetResponse documentFields = client.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(documentFields.getSourceAsString());
        System.out.println(documentFields);
    }
    //更新文档信息
    @Test
    void testUpdatedocument() throws IOException {
        UpdateRequest updateRequest=new UpdateRequest("mall_index","1");
        updateRequest.timeout("1s");
        UmsAdmin admin=new UmsAdmin("liuyt","abcdefz");
        updateRequest.doc(JSON.toJSONString(admin),XContentType.JSON);
        UpdateResponse update = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.status());
        System.out.println(update);

    }

    //删除文档信息
    @Test
    void testDeletedocument() throws IOException {
        DeleteRequest deleteRequest=new DeleteRequest("mall_index","1");
        deleteRequest.timeout("1s");

        DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(delete.status());
        System.out.println(delete);

    }

    //批量导入数据
    @Test
    void testBlukRequest () throws IOException {
        //创建批处理请求
        BulkRequest bulkRequest=new BulkRequest();
        bulkRequest.timeout("10s");

        ArrayList users=new ArrayList<>();
        users.add(new UmsAdmin("123"));
        users.add(new UmsAdmin("1231"));
        users.add(new UmsAdmin("1232"));
        users.add(new UmsAdmin("12"));
        users.add(new UmsAdmin("1233"));
        users.add(new UmsAdmin("1234"));
        users.add(new UmsAdmin("12345"));
        //批量处理请求
        for (int i = 0; i < users.size(); i++) {
            //批量添加
            bulkRequest.add(
                    new IndexRequest("mall_index")
                            .id(""+(i+1))
                            .source(JSON.toJSONString(users.get(i)),XContentType.JSON)
            );
        }
        //是否失败
        BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.hasFailures());
    }

    @Test
    void testSearch() throws Exception{

        SearchRequest searchRequest=new SearchRequest("mall_index");

        //构建搜索条件
        SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
        //匹配查询QueryBuilders.matchQuery("username","12");
        //精确查询QueryBuilders.termQuery("username","12");
        //查询匹配模式
        MatchQueryBuilder queryBuilder= QueryBuilders.matchQuery("username","12");
        searchSourceBuilder.query(queryBuilder);
        searchSourceBuilder.timeout(new Timevalue(60, TimeUnit.SECONDS));

        //高亮
        HighlightBuilder highlightBuilder=new HighlightBuilder();
        highlightBuilder.field("username");
        highlightBuilder.requireFieldMatch(false);// 关闭多个高亮显示
        highlightBuilder.preTags("");
        highlightBuilder.postTags("");
        searchSourceBuilder.highlighter(highlightBuilder);

        //执行搜索
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = client.search(searchRequest,RequestOptions.DEFAULT);
        //解析结果
        System.out.println(JSON.toJSONString(search.getHits()));
        for (SearchHit hit : search.getHits().getHits()) {
            //解析高亮字段
            Map highlightFieldMap= hit.getHighlightFields();
            HighlightField username = highlightFieldMap.get("username");
            Map sourceMap= hit.getSourceAsMap();//原来的结果
            //解析高亮字段,将原来字段替换为高亮字段
            if (username!=null){
                Text[] fragments = username.fragments();
                String n_username="";
                for (Text text : fragments) {
                    n_username+=text;
                }
                sourceMap.put("username",n_username);
            }


            System.out.println(hit.getSourceAsMap());
        }

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/281768.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号