es-springboot-api

官网:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/index.html
狂神说:https://space.bilibili.com/95256449/channel/detail?cid=146244

依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

配置

es远程配置

@Configuration
public class ESConfig {


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

}

代码

索引层面

自动注入之前配置的bean

	@Autowired
    private RestHighLevelClient client; //变量名要和配置的方法名一样

创建索引

  @Test
    void createIndex() throws IOException {
        //1,创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("api");
        //2,客户端执行请求 createIndexResponse,请求后获得相应
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);

        System.out.println(createIndexResponse.isAcknowledged());
    }

结果
在这里插入图片描述

判断索引存不存在

  @Test
    void existIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("api");
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

删除索引

    @Test
    void delIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("ajie_index");
        AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

三个api大同小异

文档层面

先创建一个实体类,方便封装

@Data
@AllArgsConstructor
@NoArgsConstructor

public class User {
    private String name;
    private int age;
}

创建一个文档

    @Test
    void addDocument() throws IOException {
        //创建对象
        User user = new User("ajie", 12);
        //创建请求
        IndexRequest request = new IndexRequest("ajie_index");

        //put 添加数据
        request.id("1"); //id
        request.timeout(TimeValue.timeValueSeconds(1));//超时时间

        //将数据转换为json 放入请求
        request.source(JSON.toJSONString(user), XContentType.JSON);

        // 客户端发送请求,获取响应结果
        IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

        System.out.println(indexResponse.toString());
        System.out.println(indexResponse.status()); //返回当前请求的状态
    }

效果:
在这里插入图片描述

判断文档是否存在

    @Test
    void existDocument() throws IOException {
        GetRequest request = new GetRequest("ajie", "1");
        // 不获取上下文,只判断存不存在
        request.fetchSourceContext(new FetchSourceContext(false));
        request.storedFields("_none_");
        // 通过客户端发送请求
        boolean exists = client.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);

    }

调用文档信息

    @Test
    void getDocument() throws IOException {
        //查询 "ajie" 这个索引的 id为 1 的信息
        GetRequest request = new GetRequest("api", "1");

        // 通过客户端发送请求,拿到文档数据
        GetResponse documentFields = client.get(request, RequestOptions.DEFAULT);
        //通过map输出
        System.out.println(documentFields.getSource());

    }

在这里插入图片描述

更改文档信息

    @Test
    void updateDocument() throws IOException {
        //创建一个更新请求
        UpdateRequest updateRequest = new UpdateRequest("api", "1");
        //设置超时时间
        updateRequest.timeout("1s");

        //将数据转为json格式,进行封装
        updateRequest.doc(JSON.toJSONString(new User("zzw", 12)), XContentType.JSON);

        // 将封装好的数据通过客户端发送出去
        UpdateResponse updateResponse = client.update(updateRequest, RequestOptions.DEFAULT);
        //相应码
        System.out.println(updateResponse.status());


    }

在这里插入图片描述

删除文档信息

    @Test
    void deleteDocument() throws IOException {

        //创建一个删除请求
        DeleteRequest request = new DeleteRequest("api", "1");
        //设置超时时间
        request.timeout("1s");

        // 通过客户端发送请求
        DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT);
        System.out.println(deleteResponse.status());


    }

批量插入数据


    @Test
    void bulkDocument() throws IOException {
        //创建批量请求
        BulkRequest bulkRequest = new BulkRequest();

        bulkRequest.timeout("10s");

        ArrayList<User> list = new ArrayList<>();
        list.add(new User("ajie",1));
        list.add(new User("zzw",2));
        list.add(new User("dab",13));
        list.add(new User("庄忠旺",132));
        list.add(new User("nt",132));
        list.add(new User("大饼",114));
        list.add(new User("奶哥",14));

        //通过for循环依次插入
        for (int i = 1; i < list.size(); i++) {
            bulkRequest.add(
                    new IndexRequest("api")
                            .id(""+(i+1))
                            .source(JSON.toJSONString(list.get(i)),XContentType.JSON)
            );

        }
        // 通过客户端发送请求
        BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        // 获得状态码
        System.out.println(bulk.status());
    }

在这里插入图片描述

查询


    @Test
    void searchDocument() throws IOException {
        SearchRequest searchRequest = new SearchRequest("api");

        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//        sourceBuilder.from();   分页操作
//        sourceBuilder.size();

        //查询条件
        /**
         *   termQuery 精确查询
         *
         *   matchAllQuery() 匹配所有
         */
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zzw");


        //查询器
        sourceBuilder.query(termQueryBuilder);
        //设置超时时间
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        searchRequest.source(sourceBuilder);
        //客户端发送请求
        SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);

        //获得hits里的数据
        System.out.println(JSON.toJSONString(search.getHits()));
        System.out.println("========================================");


        //将所有符合条件的循环输出
        for (SearchHit hit : search.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }

    }

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值