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;}// 其他自定义方法...
}
相关文章:
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" # Elastics…...

Element UI中el-dialog作为子组件如何由父组件控制显示/隐藏~
1、这里介绍的是将el-dialog作为组件封装便于复用,如何通过父组件控制子组件dialog的显示与隐藏。 2、思路:首先el-dialog是通过dialogVisible的值是否为true或false来控制显示与隐藏的。那么我们可以通过父传子props来将true(即showFlag的值࿰…...

【vue讲解:es6导入导出语法、 vue-router简单使用、登录跳转案例、scoped的使用、elementui使用】
1 es6导入导出语法 # 做项目:肯定要写模块--》导入使用# 默认导出和导入 在某个js中 # 命名导出和导入1.1 默认导出和导入 // #########导出语法########### // export default name // 只导出变量 // export default add // 只导出函数// export default {nam…...

#beego的orm一直引入失败#
在导入beego的orm的时候,一直导入失败,orm显示红色,表示导入失败 解决办法: 1:升级go,由1.7升级到1.8 2:执行以下命令 go clean go get github.com/astaxie/beego/orm go mod tidy go mod vendor 3:测试在vendor中可以看到…...

Vue插值:双大括号标签、v-text、v-html、v-bind 指令
创建应用程序实例后,需要通过插值进行数据绑定。数据绑定是 Vue.js 最核心的一个特性。建立数据绑定后,数据和视图会相互关联,当数据发生变化时,视图会自动进行更新。这样就无须手动获取 DOM 的值,使代码更加简洁&…...

实验五之用Processing绘画
1.案例代码如下: import generativedesign.*; import processing.pdf.*; import java.util.Calendar; Tablet tablet; boolean recordPDF false; float x 0, y 0; float stepSize 5.0; PFont font; String letters "Sie hren nicht die folgenden Gesnge…...

Apache CloudStack Official Document 翻译节选(七)
关于 Apache CloudStack 的 最佳实践 (一) Best Practices 部署Apache CloudStack是极具挑战性的,在整个部署过程中需要你做出形形色色的技术性选择。Apache CloudStack的配置条目是相当灵活的,这是因为在组合和配置具体条目时有…...

动态创建 Delphi 按钮的完整指南:基于配置文件的 `TGridPanel` 实现
在 Delphi 开发中,我们经常需要根据不同的配置动态生成 UI 元素。本文将带你通过一个完整的示例,演示如何根据配置文件动态创建按钮,并将它们排列在一个 TGridPanel 中。每个按钮的标题、链接、颜色和大小都将从配置文件中读取。 “C:\myApp\…...
【设计模式】工厂模式和抽象工厂模式
工厂模式 function User(role, pages) {this.role role;this.pages pages; }// new User(admin, [home, user, setting]); // new User(user, [home, user]); // new User(guest, [home]);function UserFactory(role) {switch (role) {case admin:return new User(role, [ho…...

【xilinx】Versal Adaptive SoC DDRMC - NoC QoS 选项卡未出现
在 2024.1 之前的 Vivado 版本中,用户在使用 NoC 验证块设计时可以访问 NoC 对象窗口和 QoS 选项卡。 Vivado 2024.1 中存在一个已知问题,即 NoC 对象窗口和 QoS 选项卡不出现。 要显示 NoC 对象窗口和 QoS 选项卡,请保存块设计,…...

融合创新:EasyCVR视频汇聚平台云计算技术与AI技术共筑雪亮工程智能防线
随着信息技术的飞速发展,视频云计算技术作为云计算领域的一个重要分支,正逐步在公共安全、社会治理等领域展现出其独特的优势。特别是在雪亮工程这一群众性治安防控工程中,视频云计算技术更是发挥了不可替代的作用。本文将从视频云计算技术的…...
keepalived的技术原理及其在负载均衡场景中的应用
keepalived的技术原理及其在负载均衡场景中的应用 深入探讨Keepalived及其在负载均衡场景中的应用1. **Keepalived概述**2. **Keepalived的技术原理**2.1 **VRRP协议**2.2 **健康检查机制**2.3 **脚本管理** 3. **Keepalived与LVS的结合应用**3.1 **LVS优缺点** 4. **Nginx与HA…...
树的重心 by江河湖海
引入 重心是什么? 想象你有一个由线悬挂的秋千,秋千的两端坐着两个人,如果这两个人坐在秋千的重心上,秋千就会保持平衡。在树的结构中,重心就是那个让所有节点到它那里的“距离”(可以理解为线的长度)总和最小的点。 重心为什么最多只有两个? 假设树的重心有两个,…...
MySQL存储过程深入指南
MySQL存储过程深入指南 存储过程是MySQL中一个强大的功能,能够显著提升数据库操作的效率和灵活性。本文将全面介绍存储过程的概念、语法、使用方法及最佳实践,帮助读者熟练掌握存储过程的使用。 1. 什么是存储过程? 存储过程(Stored Procedure)是预先编译并存储在数据库…...

牛客算法小题
目录 牛客.求和编辑 牛客.abb 牛客.合并k个有序链表 牛客.滑雪(暴力->递归->记忆化搜索) 牛客.旋转字符串 牛客.求和 我没想到是dfs,另外我的dfs能力确实也不强,另外难度大的是他的那个输出 import java.util.Scanne…...

小米SU7销量超特斯拉,新车明年上半年发布
小米 SU7,一款国内新能源车品牌纯血新势力旗下首款轿车,上市短短 4 个月卖出超 4 万台,月均销量过万。 该说不说,这放在整个新能源汽车工业史上也足以称得上是一件小刀喇拍屁股,让人开了眼的事儿。 就在本月初&#x…...

基于Java语言的光伏监控系统+光伏发电预测+光伏项目+光伏运维+光伏储能项目
基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 介绍 基于Java语言的光伏监控系统光伏发电系统光伏软件系统光伏监控系统源码光伏发电系统源码 基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 安装教程...

unity json 处理
1. c#对象 -> json public class Item {public int id;public int num;public Item(int id, int num){this.id id;this.num num;} } public class PlayerInfo {public string name;public int atk;public int def;public float moveSpeed;public double roundSpeed;publi…...

如何使用DataGear零编码快速制作MQTT物联网实时数据看板
DataGear是一个开源免费的数据可视化分析平台,企业版在开源版基础上开发,新增了诸多企业级特性,包括:MySQL及更多部署数据库支持、MQTT/WebSocket/Redis/MongoDB数据集、OAuth2.0/CAS/JWT/LDAP统一登录支持、前后端敏感信息加密传…...

Mysql查询日志
Mysql查询日志 Mysql查询日志默认是关闭状态的。 mysql> show variables like %general_log%; --------------------------------------- | Variable_name | Value | --------------------------------------- | general_log | OFF …...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...