springboot 整合spring-boot-starter-data-elasticsearch

依赖

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

 配置

spring:elasticsearch:rest:uris: "http://localhost:9200" # Elasticsearch服务器地址connection-timeout: 5000 # 连接超时时间

简单测试

使用Spring Data Elasticsearch的Repository接口来访问Elasticsearch。创建一个继承ElasticsearchRepository的接口。传入你的实体类和 ID 类型。

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface MyEntityRepository extends ElasticsearchRepository<MyEntity, String> {// 自定义查询方法可以在这里定义
}

 使用@Document注解来标记Elasticsearch的索引实体类。

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;@Document(indexName = "myindex")
public class MyEntity {@Idprivate String id;@Field(type = FieldType.Text)private String name;// 其他字段...
}

在服务层注入这个 Repository 并使用它来执行 CRUD 操作。 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyEntityService {

    @Autowired
    private MyEntityRepository repository;

    public MyEntity save(MyEntity entity) {
        return repository.save(entity);
    }

    public Optional<MyEntity> findById(String id) {
        return repository.findById(id);
    }

    public Iterable<MyEntity> findAll() {
        return repository.findAll();
    }

    public void deleteById(String id) {
        repository.deleteById(id);
    }

    // 可以添加自定义查询方法的实现
}


ElasticsearchTemplate 和 ReactiveElasticsearchTemplate 和ElasticsearchRepository有什么不同

`ElasticsearchTemplate`、`ReactiveElasticsearchTemplate` 和 `ElasticsearchRepository` 是 Spring Data Elasticsearch 中用于与 Elasticsearch 交互的三种不同的组件,它们各自有不同的用途和特点:

### ElasticsearchTemplate
- **同步客户端**: 提供同步的 Elasticsearch 操作,例如索引文档、搜索、更新和删除。
- **低级访问**: 允许执行更复杂的操作,如执行原生查询、管理索引映射和执行脚本。
- **使用场景**: 当你需要对 Elasticsearch 进行细粒度控制时使用。

### ReactiveElasticsearchTemplate
- **响应式客户端**: 提供非阻塞的 Elasticsearch 操作,支持响应式编程模型。
- **与 WebFlux 集成**: 适合在响应式应用程序中使用,例如 Spring WebFlux。
- **使用场景**: 当你需要构建高性能的响应式应用程序,并且希望利用非阻塞 I/O 操作时使用。

### ElasticsearchRepository
- **数据访问抽象**: 是 Spring Data 的一部分,提供声明式的数据处理能力。
- **简化 CRUD 操作**: 自动实现基本的 CRUD 操作,如保存、删除、查询等。
- **查询方法名称生成**: 支持通过方法名称生成查询,简化了查询的编写。
- **使用场景**: 当你想要快速实现数据访问层,并且希望利用 Spring Data 的便捷性时使用。

### 区别和选择
- **编程模型**: `ElasticsearchTemplate` 是同步的,`ReactiveElasticsearchTemplate` 是响应式的。根据你的应用程序是否需要响应式编程来选择。
- **抽象级别**: `ElasticsearchRepository` 提供了更高级别的抽象,简化了数据访问层的实现。`ElasticsearchTemplate` 和 `ReactiveElasticsearchTemplate` 提供了更接近底层的 Elasticsearch 操作。
- **查询能力**: `ElasticsearchRepository` 支持通过方法名称生成查询,但可能不支持所有复杂的查询。`ElasticsearchTemplate` 和 `ReactiveElasticsearchTemplate` 允许执行更复杂的查询。
- **集成方式**: 如果你的应用程序是基于 Spring WebFlux 或其他响应式库构建的,`ReactiveElasticsearchTemplate` 是更好的选择。对于传统的同步应用程序,`ElasticsearchTemplate` 更加合适。

总结来说,选择哪一个组件取决于你的具体需求、应用程序的编程模型以及你希望在数据访问层实现的复杂性。在某些情况下,你可能需要同时使用这些组件,以充分利用它们各自的优势。

ElasticsearchUtil 工具类 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.IndexOperations;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Component;@Component
public class ElasticsearchUtil {private final ElasticsearchTemplate elasticsearchTemplate;@Autowiredpublic ElasticsearchUtil(ElasticsearchTemplate elasticsearchTemplate) {this.elasticsearchTemplate = elasticsearchTemplate;}// 检查索引是否存在public boolean indexExists(String indexName) {return elasticsearchTemplate.indexExists(indexName);}// 创建索引public void createIndex(String indexName) {IndexOperations indexOps = elasticsearchTemplate.indexOps(indexName);if (!indexOps.exists()) {indexOps.create();}}// 删除索引public void deleteIndex(String indexName) {if (indexExists(indexName)) {elasticsearchTemplate.deleteIndex(indexName);}}// 索引单个文档public <T> void indexSingleDocument(T document) {elasticsearchTemplate.index(document);}// 索引多个文档public <T> void indexDocuments(Iterable<T> documents) {elasticsearchTemplate.bulkIndex(documents);}// 通过ID查找文档public <T> T findById(String id, Class<T> clazz) {return elasticsearchTemplate.get(id, clazz);}// 执行搜索查询public <T> Iterable<T> search(NativeSearchQuery searchQuery, Class<T> clazz) {return elasticsearchTemplate.queryForList(searchQuery, clazz);}// 构建并执行搜索查询public <T> Iterable<T> search(String queryString, Class<T> clazz) {NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(queryString).build();return search(searchQuery, clazz);}// 删除文档public void deleteDocument(String id, Class<?> clazz) {elasticsearchTemplate.delete(id, clazz);}// 更新文档public <T> T updateDocument(T document) {elasticsearchTemplate.update(document);return document;}// 其他自定义方法...
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集团数字化转型方(五)

集团数字化转型方案通过全面整合人工智能&#xff08;AI&#xff09;、大数据分析、云计算和物联网&#xff08;IoT&#xff09;等前沿技术&#xff0c;构建了一个高度智能化的业务平台&#xff0c;从而实现业务流程的自动化、数据驱动的决策支持、精准的市场预测、以及个性化的…

快速带你玩转高性能web服务器后续

目录 一、Nginx 高级配置 1.1 Nginx 状态页 1.2 Nginx 压缩功能 1.3 Nginx的版本隐藏 1.4 Nginx 变量使用 1.4.1 内置变量 二、 Nginx Rewrite 相关功能 2.1 ngx_http_rewrite_module 模块指令 2.1.1 if 指令 2.1.2 set 指令 2.1.3 break 指令 2.1.4 return 指令 2…

【卡码网C++基础课 1.A+B问题1】

文章目录 题目描述与分析一、C函数基础二、输入输出流三、变量四、写入数据五、输出数据六、尝试第一次提交七、循环输入输出八、延伸 题目描述与分析 题目描述&#xff1a; 你的任务是计算ab。 输入描述&#xff1a; 输入包含一系列的a和b对&#xff0c;通过空格隔开。一对a…

【UE5】基于摄像机距离逐渐剔除角色

效果 步骤 1. 新建一个工程&#xff0c;在内容浏览器中添加第三人称游戏内容包 2. 找到第三人称角色的材质实例“MI_Quinn_01”并打开 找到材质实例的父项材质“M_Mannequin” 打开材质“M_Mannequin” 在材质图表中添加如下节点 此时运行效果如文章开头所示。 参考视频&#…

【vue教程】七. Vue 的动画和过渡

文章目录 往期列表回顾本章涵盖知识点Vue 的内置动画系统基本的进入和离开过渡列表过渡 CSS 过渡CSS 过渡基础Vue 中的 CSS 过渡 JavaScript 动画使用 JavaScript 钩子 第三方动画库的使用集成 Animate.css 实例演示创建一个简单的动画应用 结语 往期列表 【vue教程】一. 环境…

RabbitMQ如何保证消息不丢失

RabbitMQ消息丢失的三种情况 第一种&#xff1a;生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题啥的&#xff0c;都有可能。 第二种&#xff1a;RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了。 第三种…

《深入浅出WPF》读书笔记.4名称空间详解

《深入浅出WPF》读书笔记.4名称空间详解 背景 主要讲明名称空间概念&#xff0c;可以理解为命名空间的引用。 xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" &#x1f446;如x可以理解为一些列命名空间的引用。 不一一列举&#xff0c;只讲几个特殊的…

Java基础——注释

在开发中注释是必不可少的&#xff0c;帮助我们更好的标记阅读代码&#xff0c;下面介绍几种常用的注释方式。 一、注释种类 1. 单行注释 使用//一行代码来进行注释&#xff0c;只能注释一行内容 2. 多行注释 使用斜杠星号的方式 /*注释多行代码*/&#xff0c;注释多行代…

2024最新急速暴走小米运动自动刷步卡密版PHP源码

2023最新发布的急速暴走小米运动自动刷步卡密版PHP源码。该源码使用PHPTP6layui-Mini开发&#xff0c;旨在实现小米运动自动刷步功能。该程序支持通过微信修改步数&#xff0c;并采用卡密认证方式&#xff0c;用户只需提交提供的卡密&#xff0c;即可每日自助修改步数。 需要注…

UDP网络攻击

UDP&#xff08;User Datagram Protocol&#xff09;作为一种无连接的网络传输协议&#xff0c;以其速度快和资源消耗小的特点&#xff0c;在多种网络服务中发挥着重要作用&#xff0c;UDP的无连接特性也使其成为DDoS攻击的优选协议。 UDP攻击概念 UDP攻击是一种网络攻击手段…

USB HiFi 声卡

USB HiFi声卡就像是你电脑上的一对超级耳朵&#xff0c;它能将你从普通音质中拯救出来&#xff0c;带你进入一个音乐细节丰富的世界。无论你是音乐迷、游戏玩家还是电影发烧友&#xff0c;这些声卡都是你的音频升级好帮手。设计师在设计USB HiFi声卡的过程&#xff0c;就像是调…

Linux虚拟机磁盘管理-添加磁盘

添加磁盘--添加前请选关闭虚拟机 添加步骤&#xff1a; 1.编辑虚拟机设置 2.选择硬盘 3.选择SCSI 4.创建新虚拟磁盘 5.设置磁盘大小 6.点击完成 开机的时候会去读取有几块硬盘&#xff0c;总共我们是有4块硬盘&#xff0c;sda\sdb\sdc\sdd 注意&#xff1a;新加的硬盘实际我们…

华为OD机试(C卷,100分)- 游戏分组

题目描述 部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分为两队,每队 5 人。 每位参与者都有一个评分,代表着他的游戏水平。为了表演赛尽可能精彩,我们需要把 10 名参赛者分为示例尽量相近的两队。 一队的实力可以表示为这一队 5 名队员的评分总和。 现在给你…

鸿萌数据恢复服务:SQL Server 中的“PFS 可用空间信息不正确”错误

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据恢复、数据备份、网络及终端数据安全等解决方案与服务。 同时&#xff0c;鸿萌是国际主流数据恢复软件(Stellar、UFS、R-Studio、ReclaiMe Pro 等)的授权代理商&#xff0c;为专…

爬虫案例3——爬取彩票双色球数据

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正 任务&#xff1a;从500彩票网中爬取双色球数据 目标网页地址&#xff1a;https://datachart.500.com/ssq/ 一、思路和过程 目标网页具体内容如下&#xff1a; ​​​​​ 我们的任务是将上图中…

使用AWS Lambda轻松开启Amazon Rekognition之旅

这是本系列文章的第一篇&#xff0c;旨在通过动手实践&#xff0c;帮助大家学习亚马逊云科技的生成式AI相关技能。通过这些文章&#xff0c;大家将掌握如何利用亚马逊云科技的各类服务来应用AI技术。 那么让我们开始今天的内容吧&#xff01; 介绍 什么是Amazon Rekognition&…

前端宝典之五:React源码解析之深度剖析Diff算法

本文主要针对React源码进行解析&#xff0c;内容有&#xff1a; 1、Diff算法原理、两次遍历 2、Diff瓶颈及限制 3、Diff更新之单节点和多节点原理 一、Diff源码解析 以下是关于 React Diff 算法的详细解析及实例&#xff1a; 1、React Diff 算法的基本概念和重要性 1.1 概念…

【LeetCode每日一题】——301.删除无效的括号

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 广度优先搜索 二【题目难度】 困难 三【题目编号】 301.删除无效的括号 四【题目描述】 给…

ROS 2中,CMakeList.txt常见语法

在ROS 2中&#xff0c;CMakeList.txt 文件扮演着配置和管理构建过程的重要角色。这个文件遵循CMake的语法&#xff0c;用于定义如何编译和链接源代码。下面是一些在ROS 2项目CMakeList.txt文件中常见的语法和用法。 1. 基本结构和命令 cmake_minimum_required(VERSION )&…

【设计模式】装饰器模式和适配模式

装饰器模式 装饰器模式能够很好的对已有功能进行拓展&#xff0c;这样不会更改原有的代码&#xff0c;对其他的业务产生影响&#xff0c;这方便我们在较少的改动下对软件功能进行拓展。 类似于 router 的前置守卫和后置守卫。 Function.prototype.before function (beforeFn)…