SpringBoot RestHighLevelClient 按版本更新

SpringBoot RestHighLevelClient 按版本更新

  • [1 查询](#1 查询)
  • [2 更新](#2 更新)

RestHighLevelClient 是 Elasticsearch 提供的一个用于与 Elasticsearch 集群交互的高级 REST 客户端。它是基于 Java 的客户端,旨在提供一种简单且功能丰富的方式来执行各种 Elasticsearch 操作,包括索引、搜索、更新和删除文档,以及管理索引和集群。

主要特点 解释
高级 API 提供了一组高级 API,简化了与 Elasticsearch 交互的复杂性。
线程安全 设计为线程安全,可以在多线程环境中使用。
轻松配置 可以通过简单的配置连接到 Elasticsearch 集群。
支持所有 Elasticsearch 功能 几乎支持所有 Elasticsearch 提供的功能,包括文档操作、搜索、聚合、索引管理、集群管理等。
同步和异步操作 支持同步和异步两种操作方式,满足不同的使用场景。
xml 复制代码
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.13.4</version>
</dependency>

1 查询

java 复制代码
import lombok.extern.slf4j.Slf4j;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.jeecg.modules.demo.cate.entity.CateRule;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class NewTest {

    @Autowired
    private ObjectMapper objectMapper;

    @Autowired
    private RestHighLevelClient client;

    @Test
    public void test() {
        search("student_test", "1", CateRule.class);
    }

    /**
     * 查询
     *
     * @param index 索引
     * @param id    ID
     * @param cls   类
     * @param <T>   类
     * @return 类
     */
    private <T> T search(String index, String id, Class<T> cls) {
        try {
            GetRequest get = new GetRequest(index, id);
            GetResponse response = client.get(get, RequestOptions.DEFAULT);
            if (response.isExists()) {
                return objectMapper.readValue(response.getSourceAsString(), cls);
            } else {
                return null;
            }
        } catch (Exception e) {
            log.error("查询失败!", e);
        }
        return null;
    }

}

2 更新

java 复制代码
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.document.Document;
import org.springframework.test.context.junit4.SpringRunner;

import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class NewTest {

    @Autowired
    private RestHighLevelClient client;

    @Test
    public void test() {
        forceUpdate(Document.create(), "student_test", "1");
    }

    /**
     * 按版本更新
     *
     * @param doc   Document
     * @param index 索引
     * @param id    ID
     * @return 结果
     */
    private boolean forceUpdate(Document doc, String index, String id) {
        try {
            // 查询
            GetRequest get = new GetRequest(index, id);
            GetResponse rep1 = client.get(get, RequestOptions.DEFAULT);
            if (!rep1.isExists()) {
                return false;
            }
            long seqNo = rep1.getSeqNo();
            long primaryTerm = rep1.getPrimaryTerm();

            // 更新
            UpdateRequest update = new UpdateRequest(index, id)
                    .doc(doc.toJson(), XContentType.JSON)
                    .setIfSeqNo(seqNo)
                    .setIfPrimaryTerm(primaryTerm);
            UpdateResponse rep2 = client.update(update, RequestOptions.DEFAULT);
            if (rep2.status() == RestStatus.OK) {
                return true;
            }
        } catch (Exception e) {
            log.error("更新失败!", e);
        }
        return false;
    }

}
相关推荐
bcgbsh1 天前
身份认证状态的存储与传递( Spring Boot篇 )
springboot·登录
xiezhr1 天前
Java开发中最那些常见的坑,你踩过几个?
java·spring·springboot·后端开发
原来是好奇心3 天前
Spring Boot缓存实战:@Cacheable注解详解与性能优化
java·spring·mybatis·springboot
千寻技术帮4 天前
50013_基于微信小程序的校园志愿者系统
mysql·微信小程序·springboot·文档·ppt
合作小小程序员小小店6 天前
web网页开发,在线%考试管理%系统,基于Idea,vscode,html,css,vue,java,maven,springboot,mysql
java·前端·系统架构·vue·intellij-idea·springboot
he___H6 天前
RabbitMQ 小项目之扫盲班
微服务·springboot
程序员小赵同学6 天前
Spring AI Alibaba文生图实战:从零开始编写AI图片生成Demo
阿里云·ai·springboot·springai
合作小小程序员小小店7 天前
web网页开发,在线考勤管理系统,基于Idea,html,css,vue,java,springboot,mysql
java·前端·vue.js·后端·intellij-idea·springboot
披着羊皮不是狼7 天前
多用户博客系统搭建(1):表设计+登录注册接口
java·开发语言·springboot
IT小哥哥呀10 天前
Jenkins + Docker 打造自动化持续部署流水线
docker·微服务·自动化·jenkins·springboot·高并发·限流