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;
    }

}
相关推荐
程序猿_极客4 天前
【免费】分享一套优质的基于SpringBoot的扶贫助农管理系统(详解)
java·springboot·课程设计·计算机项目
苏渡苇6 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
好菇娘の当自强6 天前
【Spring Boot 2.x 与 3.x YAML 配置区别详解】
springboot
cnkeysky6 天前
SpringBoot 整合 nacos 配置中心
nacos·springboot
她说..6 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
小蒜学长7 天前
大学生健康饮食的智慧管理系统(代码+数据库+LW)
java·后端·springboot·大学生·健康饮食
小蒜学长8 天前
基于SpringBoot+Vue的游戏论坛系统的设计与实现(代码+数据库+LW)
java·后端·springboot·游戏论坛系统·社区生态
新时代农民工~8 天前
【双机高可用部署方案-前后端部署】
java·nginx·springboot
愛芳芳8 天前
Swagger2 多环境动态配置实战指南
java·后端·maven·springboot·swagger
滕州市燕猫虎计算机科技工作室个体工商户9 天前
SpringCloud应用启动后自动shutdown的原因
springboot·springcloud·自动退出·自动shutdown