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

}
相关推荐
周航宇JoeZhou2 天前
JP3-2-1-MyItem项目简介
java·ai·springboot·环境搭建·项目·管理·springai
剧号2 天前
互联网大厂Java面试全解析:Java SE 11, Spring Boot及微服务实战问答
java·微服务·面试·kafka·kubernetes·springboot·分布式系统
勿忘初心12213 天前
【Windows流媒体实战2】SpringBoot2.x 整合FFmpeg 完整实操教程
ffmpeg·springboot·流媒体开发·nginx-rtmp·rtmp视频录制
X-⃢_⃢-X4 天前
四、OpenFeign远程调用
java·微服务·springboot·springcloud
凤山老林5 天前
SpringBoot实战:构建优雅的全局异常处理机制
java·springboot·异常处理
长谷深风1115 天前
Java基础知识梳理(四):异常体系、finally与统一异常处理
springboot·异常处理·java基础·项目·统一异常处理·异常·finally机制
troyzhxu7 天前
列表查询的 GraphQL —— 一行代码终结你的 if-else 地狱!
java·springboot·graphql
极光代码工作室8 天前
基于SpringBoot的在线博客系统
java·springboot·web开发·后端开发
Java爱好狂.9 天前
Java就业需要学习哪些内容?
spring·程序员·springboot·架构师·java面试·java面试题·java八股文
极光代码工作室11 天前
基于SpringBoot的内容管理系统(CMS)
java·springboot·web开发·后端开发