简单的SpringBoot整合ElasticSearch测试 添加和查询

本次测试 添加和查询

准备测试需要用的东西
在这里插入图片描述
yml配置

server:
  port: 11000
spring:
  application:
    name: gulimall-search
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848

这里的版本要和所按照的ELK版本匹配。

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.4.2</version>
</dependency>

在spring-boot-dependencies中所依赖的ES版本位6.8.5,要改掉

<properties>
    <java.version>1.8</java.version>
    <elasticsearch.version>7.4.2</elasticsearch.version>
</properties>

请求测试项,比如es添加了安全访问规则,访问es需要添加一个安全头,就可以通过requestOptions设置
这里强烈建议在properties下声明一下版本号,我的就在这一直出错

 <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
        <mysql.version>5.1.32</mysql.version>
        <elasticsearch.version>7.4.2</elasticsearch.version>
    </properties>

EsConfig工具类里面

package com.guli.gulimall.esconfig;

import org.apache.http.HttpHost;
import org.elasticsearch.client.HttpAsyncResponseConsumerFactory;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GuliESConfig {

    public static final RequestOptions COMMON_OPTIONS;


    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        /*builder.addHeader("Authorization", "Bearer " + TOKEN);
        builder.setHttpAsyncResponseConsumerFactory(
                new HttpAsyncResponseConsumerFactory
                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));*/
        COMMON_OPTIONS = builder.build();
    }


    @Bean
    public RestHighLevelClient createRestHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder( new HttpHost("192.168.56.10", 9200, "http")));//因为我连的虚拟机所以就是我虚拟机ip
        return client;
    }

}

测试类

package com.guli.gulimall;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.guli.gulimall.dto.User;
import com.guli.gulimall.esconfig.GuliESConfig;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;
import java.util.ArrayList;

@SpringBootTest
@RunWith(SpringRunner.class)
public class Test {
    @Autowired
    private RestHighLevelClient restHighLevelClient;

@org.junit.Test
    public void test1() throws IOException {
    //这输出是看那个工具类取没取到
    System.out.println(restHighLevelClient);
   IndexRequest indexRequest = new IndexRequest("aaa");//aaa是索引 在mysql中这个叫数据库
   //这里index 在es中就是添加的意思
    User user = new User(3,"小彬","女");//随便定义一个实体类
   // 这个id是指定的id可有可无,默认是符号代替
  indexRequest.id(user.getId().toString());

在这里插入图片描述

//转成json 因为es只能用于json
  String json = JSONObject.toJSONString(user);
  //设置要保存的内容,指定数据和类型
  indexRequest.source(json, XContentType.JSON);
  //执行创建索引和保存数据
  restHighLevelClient.index(indexRequest, GuliESConfig.COMMON_OPTIONS);

  System.out.println("成功");
}

查询方法

    @org.junit.Test
    public void Test2() throws IOException {
        // 1 创建检索请求  Search在es里面代表查询这个都知道吧
        SearchRequest searchRequest = new SearchRequest("aaa");
     //   创建条件构建器 SearchSourceBuilder
        SearchSourceBuilder builder = new SearchSourceBuilder();
        // 这里查的所有
        builder.query(QueryBuilders.matchAllQuery());
        //第二种写法
        /* 查询条件
        QueryBuilder query = QueryBuilders.matchAllQuery();

            指定查询条件
        searchSourceBuilder.query(query);*/
        //查询条件构建器
        searchRequest.source(builder);
        //查询,获取结果
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest,GuliESConfig.COMMON_OPTIONS);
    //    System.out.println(searchResponse+"查所有");//我们可以看出很多我们不需要的值
       //获取命中对象 hits
        SearchHits hits = searchResponse.getHits();
        //获取hits数组
        SearchHit[] hits1 = hits.getHits();
        /*我们可以看出有我们想要的值,但是类型不一样
            可以创建一个集合存储es的每一条记录
        * */

在这里插入图片描述
但是查出来的类型不是我们想要的所以要

      /* for (SearchHit documentFields : hits1) {
           System.out.println(documentFields);
       }*/
       ArrayList<User> users = new ArrayList<>();
       for (SearchHit documentFields : hits1) {
           //获取到hits中的每一个asString
           String asString = documentFields.getSourceAsString();
           //将asString中的数据封装为user对象
           User user = JSONObject.parseObject(asString, User.class);//当然你也可以一个一个赋值,我这里就省略了
           users.add(user);
       }
       //输出
       for (User user : users) {
           System.out.println(user);
       }

   }

}

在这里插入图片描述
更详细请看官网
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值