springboot配置操作es7.6.2

1 篇文章 0 订阅

1.安装7.6.2的es

访问地址+端口显示如下表示安装成功。
在这里插入图片描述

2.加入maven依赖,在properties中制定版本号

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <elasticsearch.version>7.6.2</elasticsearch.version>
</properties>
        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

3.创建es的连接配置类

@Configuration
public class ElasticsearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client= new RestHighLevelClient(
                RestClient.builder(new HttpHost("***",9200,"http")));
        return client;
    }
}

4.一些简单的es操作测试

注解注入es类

 @Autowired
 private RestHighLevelClient restHighLevelClient;
  1. 添加索引值
    @Test
    void testIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("d_index");

        CreateIndexResponse createIndexResponse= restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);

    }
  1. 判断索引是否添加成功,返回true代表存在索引。
    @Test
    void testExitIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("d_index");

        boolean exits=
                restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exits);
    }
  1. 删除索引
    @Test
    void testdelIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("d_index");

        AcknowledgedResponse delete =restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }
  1. 添加文档内容
   @Test
    void testAddDocument() throws IOException{
        User user=new User();
        user.setUserBean("123");
        user.setUserId(123);
        IndexRequest request=new IndexRequest("d_index");
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(2));

        request.source(JSON.toJSONString(user), XContentType.JSON);
        IndexResponse indexResponse =restHighLevelClient.index(request,RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString());
    }

返回为代表成功IndexResponse[index=d_index,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={“total”:2,“successful”:1,“failed”:0}]

  1. 更新文档内容

        @Test
    void updateGetDocument() throws IOException{
        UpdateRequest updateRequest = new UpdateRequest("d_index","1");
        updateRequest.timeout("1s");
        User user=new User();
        user.setUserBean("456");
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse updateResponse = restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);
        System.out.println(updateResponse.status());
    }

返回ok代表成功

  1. 删除文档内容

    @Test
    void deleteGetDocument() throws IOException{

        DeleteRequest request = new DeleteRequest("d_index","1");
        request.timeout("1s");

        DeleteResponse deleteResponse = restHighLevelClient.delete(request,RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());

    }
  1. 批量插入数据
    @Test
    void testbulkRequest() throws IOException {
        BulkRequest bulkRequest=new BulkRequest();
        bulkRequest.timeout("10s");
        List<User> list=userMapper.selectAllUser();

        for (int i=0;i<list.size();i++){
            bulkRequest
                    .add(new IndexRequest("d_index")
                            .id(""+(i+1))
                            .source(JSON.toJSONString(list.get(i)),XContentType.JSON));
        }
        BulkResponse bulkResponse =restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);//返回false表示成功插入
        System.out.println(bulkResponse.hasFailures());

    }
  1. 创建搜索条件
//创建索引
 SearchRequest searchRequest= new SearchRequest("d_index");
 SearchSourceBuilder searchSourceBuilder=new SearchSourceBuilder();
 //设置分页效果,表示0到10条记录
 searchSourceBuilder.from(0);
 searchSourceBuilder.size(10);
// 精准查询
TermQueryBuilder termQueryBuilder=QueryBuilders.termQuery("字段1",searchContent);
TermQueryBuilder termQueryBuilder1= QueryBuilders.termQuery("字段2",searchContent);
BoolQueryBuilder queryBuilder=QueryBuilders.boolQuery().should(termQueryBuilder1).should(termQueryBuilder);
//分词查询,该模式需要插入ik分词词才能达到更好的分词效果,否则使用es自带的分词器
 MatchQueryBuilder matchQueryBuilder=QueryBuilders.matchQuery("字段1",searchContent);
MatchQueryBuilder matchQueryBuilder1=QueryBuilders.matchQuery("字段2",searchContent);
MatchQueryBuilder queryBuilder=QueryBuilders.boolQuery().should(matchQueryBuilder).should(matchQueryBuilder1);

//词语匹配模式
MatchPhraseQueryBuilder matchPhraseQueryBuilder=QueryBuilders.matchPhraseQuery("bookName",searchContent);
MatchPhraseQueryBuilder matchPhraseQueryBuilder1=QueryBuilders.matchPhraseQuery("bookAuthor",searchContent);
MatchPhraseQueryBuilder matchPhraseQueryBuilde2=QueryBuilders.matchPhraseQuery("bookIntro",searchContent);
BoolQueryBuilder queryBuilder=QueryBuilders.boolQuery().should(matchPhraseQueryBuilder).should(matchPhraseQueryBuilder1).should(matchPhraseQueryBuilde2);


//最后执行,即可得出最后的运行效果
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.timeout(new TimeValue(1000));
searchRequest.source(searchSourceBuilder);
SearchResponse response= restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
//计算得出的总数
long count = response.getHits().getTotalHits().value;
System.out.println(JSON.toJSONString(response.getHits()));
System.out.println("===========");
for (SearchHit searchHit:response.getHits().getHits()){
            System.out.println(searchHit.getSourceAsMap());
        }

9.设置高亮显示(已我项目上的两个实体类上字段为例)

//          高亮设置
//			在上一步searchRequest.source(searchSourceBuilder);前加入
            HighlightBuilder highlightBuilder =new HighlightBuilder();

//			需要高亮的字段
            highlightBuilder.field("bookName");
            highlightBuilder.field("bookAuthor");
            highlightBuilder.preTags("<span style='color:red;'>");
            highlightBuilder.postTags("</span>");
            highlightBuilder.requireFieldMatch(false);
            searchSourceBuilder.highlighter(highlightBuilder);
//			在上一步后面加上
            Map<String, HighlightField> highlightFields =searchHit.getHighlightFields();
            Map<String,Object> sourceMap = searchHit.getSourceAsMap();//原来的结果

            HighlightField bookName = highlightFields.get("bookName");
            if (bookName!=null){
                Text[] fragments=bookName.fragments();
                String n_Name = "";
                for (Text text:fragments){
                    n_Name+=text;
                }
                sourceMap.put("bookName",n_Name);
            }

            HighlightField bookAuthor = highlightFields.get("bookAuthor");
            if (bookAuthor!=null){
                Text[] fragments=bookAuthor.fragments();
                String n_Name = "";
                for (Text text:fragments){
                    n_Name+=text;
                }
                sourceMap.put("bookAuthor",n_Name);
            }

            BookInfoRes bookInfoRes= JSON.parseObject(JSON.toJSONString(sourceMap),BookInfoRes.class);
            list.add(bookInfoRes);
        }

10.最后的list就是你得到的数据将其返回给前端即可。大致的es操作就完成了。


es的学习上我是参考了狂神说,学习之中稍微记录了下笔记,详细学习的推荐去看下哔站的狂神说这部分。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值