4、ElasticSearch:SpringBoot集成ES

学习步骤:找官方文档进行查看 官网

在这里插入图片描述
ElasticSearch客户端

在这里插入图片描述

在这里插入图片描述

7.1、找官网文档

  1. 找到原生的依赖
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.9.2</version>
</dependency>
  1. 找对象
    在这里插入图片描述
  2. 分析这个类中的方法
  • 新建一个SpringBoot项目

在这里插入图片描述

7.2、配置基本的项目

一定要保证,我们的导入的依赖和我们的es版本一致

在这里插入图片描述

  • 本地es版本

在这里插入图片描述

7.3、测试API

前提:

  1. 在config目录下编写ElasticSearchConfig,将其注入到spring容器中
@Configuration //相当于xml文件
public class ElasticSearchClientConfig {

    // Spring两步骤  1. 找对象  2. 放到spring中待用

    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")));
        return client;
    }
}
  1. 在SpringBoot自带的测试类中进行测试
@SpringBootTest
class SpringbootEsApiApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client ;
    
    // ......
}

7.3.1、创建索引

    // 创建索引  Request
    @Test
    void testCreateIndex() throws IOException {
        // 创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("jl_index");
        // 客户端执行请求  IndicesClient
        // RequestOptions.DEFAULT 默认参数
        CreateIndexResponse createIndexResponse =
                client.indices().create(request, RequestOptions.DEFAULT);
    }

7.3.2、判断索引是否存在

    // 获取索引,判断索引是否存在
    @Test
    void testExistIndex() throws IOException {
        // 获取索引请求
        GetIndexRequest request = new GetIndexRequest("jl_index");
        // 判断是否存在
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists); // true存在
    }

7.3.3、删除索引

	// 删除索引,判断索引是否存在
    @Test
    void testDeleteIndex() throws IOException {
        // 删除索引请求
        DeleteIndexRequest request = new DeleteIndexRequest("jl_index");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        // 查看是否成功删除
        System.out.println(delete.isAcknowledged());
    }

-------------------------------------创建文档时需要实体类(对象)----------------------------------------------

创建User实体类

@Component // 注入到Spring容器中
public class User {
    private String name;
    private Integer age;
    // Getter/Setter/toString
}

7.3.4、创建文档

es中数据都是JSON格式的,User对象不能直接放入请求,所以user对象需要转化为JSON字符串,所以需要导入fastjson依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>

创建文档

// 创建文档
    @Test
    void testAddDocument() throws IOException {
        // 创建对象
        User user = new User("jl",21);
        // 创建请求
        IndexRequest request = new IndexRequest("jl_index");
        // 规则  put/jl_index/_doc/1
        request.id("1");
        // 超时设置,  也可以是request.timeout("1s");
        request.timeout(TimeValue.timeValueSeconds(1));

        // 将我们的数据放入请求 所有的数据都是JSON数据
        // 所以需要将对象转化为JSON字符串
        IndexRequest source = request.source(JSON.toJSONString(user), XContentType.JSON);
        // 客户端发送请求
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status()); //对应命令返回的状态  CREATED
    }

7.3.5、获取文档,判断是否存在

    // 获取文档,判断是否存在
    @Test
    void testIsExists() throws IOException {
        GetRequest getRequest = new GetRequest("jl_index","1");
        boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

7.3.6、获取文档信息

    // 获取文档信息
    @Test
    void testDetDocument() throws IOException {
        GetRequest getRequest = new GetRequest("jl_index", "1");
        GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
        // 输出文档的内容
        System.out.println(getResponse.getSourceAsString());
        System.out.println(getResponse); // 返回全部内容和命令是一样的
    }

7.3.7、更新文档的信息

    // 更新文档的信息
    @Test
    void testUpdateDocument() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("jl_index", "1");
        updateRequest.timeout("1s");
        User user = new User("张三", 18);
        updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(updateResponse.status());
    }

7.3.8、删除文档

    // 删除文档
    @Test
    void testDeleteDocument() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("jl_index", "1");
        deleteRequest.timeout("1s");
        DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());
    }

7.3.9、批量插入数据

    // 真实项目中一般都会批量插入数据
    @Test
    void testBulkRequest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        ArrayList<User> userList = new ArrayList<>();
        userList.add(new User("jl1",20));
        userList.add(new User("jl2",20));
        userList.add(new User("jl3",20));
        userList.add(new User("zs1",21));
        userList.add(new User("zs2",22));
        userList.add(new User("zs3",20));

        // 批处理请求
        for (int i = 0; i < userList.size(); i++) {
            // 批量更新和批量删除,就在这里修改对应的请求
            bulkRequest.add(new IndexRequest("jl_index")
                    .id("" +(i+1))
                    .source(JSON.toJSONString(userList.get(i)),XContentType.JSON));
        }

        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        // 查看是否失败  false代表没有失败
        System.out.println(bulkResponse.hasFailures());
    }

7.3.10、查询数据

重点:

  • 搜索请求SearchRequest
  • 条件构造SearchSourceBuilder
  • 构建高亮highlightBuilder
  • 精确查询TermQueryBuilder
  • 查询全部MatchAllQueryBuilder
  • 基本都是xxx QueryBuilder 对应我们看到的命令
    // 查询
    @Test
    void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest("jl_index");
        // 构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        // 查询条件, 我们可以使用 QueryBuilders 工具来实现
        // QueryBuilders.termQuery 精确查询
        // QueryBuilders.matchAllQuery() 匹配所有
		// TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "jl1");
         MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        // 查询
        sourceBuilder.query(matchAllQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));

        // 将条件放入到请求中
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse.getHits()));
        System.out.println("===========================================");
        // 打印数据
        for (SearchHit documentFields : searchResponse.getHits().getHits()) {
            System.out.println(documentFields.getSourceAsMap());
        }
    }

学习视频:网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值