ElasticSearch之springboot对文档的操作

一、环境准备

springboot整合ElasticSearch:https://editor.csdn.net/md/?articleId=119530392
在此基础上
加上User类以及fastjson依赖
User类

package com.zzuli.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

@Data
@Component
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
}

fastjson

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

二、对文档进行操作

前提是创建一个名为test_index的索引

//测试索引的创建
    @Test
    void contextLoads() throws IOException {
        //创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("test_index");
        //客户端执行请求,并响应
        CreateIndexResponse createIndexResponse =
                restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse);
    }

并注入RestHighLevelClient

 @Resource
    private RestHighLevelClient restHighLevelClient;

2.1、添加文档

 //添加文档
    @Test
    void testAddDocument() throws IOException {
        //创建对象
        User user= new User("test1",12);
        //创建请求
        IndexRequest request = new IndexRequest("test_index");

        //规则 put /test_index/_doc/1
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(1));
        request.timeout("1s");

        //数据放入请求,数据需要转化为JSON字符串
        request.source(JSON.toJSONString(user), XContentType.JSON);
        //发送请求
        IndexResponse indexResponse = restHighLevelClient.index(request,RequestOptions.DEFAULT);

        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status());

    }

在这里插入图片描述
在这里插入图片描述

2.2、判断文档是否存在

  //判断文档是否存在
    @Test
    void testExists() throws IOException {
        GetRequest request = new GetRequest("test_index","1");
        boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

在这里插入图片描述

2.3、获取文档信息

 @Test
    void testGetDocment() throws IOException {
        //请求
        GetRequest request = new GetRequest("test_index","1");
        //响应
        GetResponse response = restHighLevelClient.get(request,RequestOptions.DEFAULT);
        //打印文档内容
        System.out.println(response.getSource());
        //获取响应的全部内容
        System.out.println(response);
    }

在这里插入图片描述

2.4、 更新文档

 @Test
    void updateDocument() throws IOException {
        //请求
        UpdateRequest request = new UpdateRequest("test_index","1");
        request.timeout("1s");

        //写入修改数据
        User user = new User("xiaoming",18);
        request.doc(JSON.toJSONString(user),XContentType.JSON);

        //响应
        UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

在这里插入图片描述
在这里插入图片描述

2.5、删除文档记录

 //删除文档记录
    @Test
    void deleteDoc() throws IOException {
        //请求
        DeleteRequest request = new DeleteRequest("test_index","1");
        request.timeout("1s");
        //响应
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

在这里插入图片描述

2.6、批量插入数据

//批量插入数据
    @Test
    void testBulkRequest() throws IOException {
        BulkRequest request = new BulkRequest();
        request.timeout("5s");

        ArrayList<User> userArrayList = new ArrayList<>();
        userArrayList.add(new User("test1",1));
        userArrayList.add(new User("test2",2));
        userArrayList.add(new User("test3",3));
        userArrayList.add(new User("test4",4));
        userArrayList.add(new User("test5",5));

        //批量处理请求
        for (int i = 0; i < userArrayList.size(); i++) {
            //批量更新与删除在这里修改即可
            //这里不屑id,会自动生成
            request.add(
                    new IndexRequest("test_index")
                    .id(""+(i+1))
                    .source(JSON.toJSONString(userArrayList.get(i)),XContentType.JSON)
            );
        }
        //响应
        BulkResponse responses = restHighLevelClient.bulk(request,RequestOptions.DEFAULT);
        //false表示没有失败
        System.out.println(responses.hasFailures());
    }

false表示没有失败,即插入成功
在这里插入图片描述
在这里插入图片描述

2.7、查询文档

查询的API比较多,这里用最基本的精确查询为例子

 //查询文档
    @Test
    void testSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest("test_index");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //QueryBuilders.termQuery()为精确查询
        TermQueryBuilder termQueryBuilder  = QueryBuilders.termQuery("name","test1");
        sourceBuilder.query(termQueryBuilder);
        //设置超时时间,超过这个时间就请求失败
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        searchRequest.source(sourceBuilder);
        //响应
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(searchResponse));
        System.out.println("+++++++++++++++++++++++++++++++");
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }
    }

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韭菜盖饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值