五、Elasticsearch 集成
目录
- 5.1 Spring Data 框架集成
- 5.1.1 Spring Data 框架介绍
- 5.1.2 Spring Data Elasticsearch 介绍
- 5.1.3 Spring Data Elasticsearch 版本对比
- 5.1.4 集成步骤
5.1 Spring Data 框架集成
5.1.1 Spring Data 框架介绍
Spring Data 是一个用于简化数据库开发的开源框架。其主要目标是使得对数据的访问变得方便快捷,
Spring Data 可以极大的简化操作数据库的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了 CRUD 外,还包括如分页、排序等一些常用的功能。
Spring Data 的官网:https://spring.io/projects/spring-data
5.1.2 Spring Data Elasticsearch 介绍
Spring Data Elasticsearch 基于 spring data API 简化 Elasticsearch 操作,将原始操作Elasticsearch 的客户端 API 进行封装。
官方网站: https://spring.io/projects/spring-data-elasticsearch
5.1.3 Spring Data Elasticsearch 版本对比

5.1.4 集成步骤
1、创建 Maven 项目
2、添加 pom 文件
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency></dependencies>
3、增加配置文件
# es 服务地址
elasticsearch.host=127.0.0.1
# es 服务端口
elasticsearch.port=9200
# 配置日志级别,开启 debug 日志
logging.level.com.houchen=debug
4、SpringBoot 主程序
@SpringBootApplication
public class SpringDataElasticSearchMainApplication {public static void main(String[] args) {SpringApplication.run(SpringDataElasticSearchMainApplication.class,args);}
}
5、数据实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Product {private Long id;//商品唯一标识private String title;//商品名称private String category;//分类名称private Double price;//商品价格private String images;//图片地址
}
6、Es配置类
- ElasticsearchRestTemplate 是 spring-data-elasticsearch 项目中的一个类,和其他 spring 项目中的 template类似。
- 在新版的 spring-data-elasticsearch 中,ElasticsearchRestTemplate 代替了原来的 ElasticsearchTemplate。原因是 ElasticsearchTemplate 基于 TransportClient,TransportClient 即将在 8.x 以后的版本中移除。所以,我们推荐使用 ElasticsearchRestTemplate。
- ElasticsearchRestTemplate 基 于 RestHighLevelClient 客户端的。需要自定义配置类,继承
AbstractElasticsearchConfiguration,并实现 elasticsearchClient()抽象方法,创建 RestHighLevelClient 对
象
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
@Data
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {private String host;private Integer port;@Overridepublic RestHighLevelClient elasticsearchClient() {RestClientBuilder builder = RestClient.builder(new HttpHost(host, port));RestHighLevelClient restHighLevelClient = newRestHighLevelClient(builder);return restHighLevelClient;}
}
7、DAO 数据访问对象
@Repository
public interface ProductDao extends ElasticsearchRepository<Product,Long> {
}
8、实体类映射操作
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Document(indexName = "product",shards = 3, replicas = 1)
public class Product {@Idprivate Long id;//商品唯一标识@Field(type = FieldType.Text, analyzer = "ik_max_word")private String title;//商品名称@Field(type = FieldType.Keyword)private String category;//分类名称@Field(type = FieldType.Double)private Double price;//商品价格@Field(type = FieldType.Keyword, index = false)private String images;//图片地址}
9、索引操作
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDateEsIndexTest {@Autowiredprivate ElasticsearchRestTemplate elasticSearchRestTemplate;@Autowiredprivate ProductDao productDao;//创建索引并增加映射配置@Testpublic void createIndex(){//创建索引,系统初始化会自动创建索引System.out.println("创建索引");}public void deleteIndex(){//创建索引,系统初始化会自动创建索引boolean flg = elasticSearchRestTemplate.deleteIndex(Product.class);System.out.println("删除索引 = " + flg);}}
10、文档操作
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataESProductDaoTest {@Autowiredprivate ProductDao productDao;/*** 新增*/@Testpublic void save() {Product product = new Product();product.setId(2L);product.setTitle("华为手机");product.setCategory("手机");product.setPrice(2999.0);product.setImages("http://www.atguigu/hw.jpg");productDao.save(product);}//修改@Testpublic void update() {Product product = new Product();product.setId(1L);product.setTitle("小米 2 手机");product.setCategory("手机");product.setPrice(9999.0);product.setImages("http://www.atguigu/xm.jpg");productDao.save(product);}//根据 id 查询@Testpublic void findById() {Product product = productDao.findById(1L).get();System.out.println(product);}//查询所有@Testpublic void findAll() {Iterable<Product> products = productDao.findAll();for (Product product : products) {System.out.println(product);}}//删除@Testpublic void delete() {Product product = new Product();product.setId(1L);productDao.delete(product);}//批量新增@Testpublic void saveAll() {List<Product> productList = new ArrayList<>();for (int i = 0; i < 10; i++) {Product product = new Product();product.setId(Long.valueOf(i));product.setTitle("[" + i + "]小米手机");product.setCategory("手机");product.setPrice(1999.0 + i);product.setImages("http://www.atguigu/xm.jpg");productList.add(product);}productDao.saveAll(productList);}//分页查询@Testpublic void findByPageable() {//设置排序(排序方式,正序还是倒序,排序的 id)Sort sort = Sort.by(Sort.Direction.DESC, "id");int currentPage = 0;//当前页,第一页从 0 开始,1 表示第二页int pageSize = 5;//每页显示多少条//设置查询分页PageRequest pageRequest = PageRequest.of(currentPage, pageSize, sort);//分页查询Page<Product> productPage = productDao.findAll(pageRequest);for (Product Product : productPage.getContent()) {System.out.println(Product);}}
}
11、文档搜索
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDateEsIndexTest {@Autowiredprivate ElasticsearchRestTemplate elasticSearchRestTemplate;@Autowiredprivate ProductDao productDao;/*** term 查询* search(termQueryBuilder) 调用搜索方法,参数查询构建器对象*/@Testpublic void termQuery(){TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "小米");Iterable<Product> products = productDao.search(termQueryBuilder);for (Product product : products) {System.out.println(product);}}/*** term 查询加分页*/@Testpublic void termQueryByPage(){int currentPage= 0 ;int pageSize = 5;//设置查询分页PageRequest pageRequest = PageRequest.of(currentPage, pageSize);TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", " 小米");Iterable<Product> products =productDao.search(termQueryBuilder,pageRequest);for (Product product : products) {System.out.println(product);}}}
相关文章:
五、Elasticsearch 集成
目录 5.1 Spring Data 框架集成5.1.1 Spring Data 框架介绍5.1.2 Spring Data Elasticsearch 介绍5.1.3 Spring Data Elasticsearch 版本对比5.1.4 集成步骤 5.1 Spring Data 框架集成 5.1.1 Spring Data 框架介绍 Spring Data 是一个用于简化数据库开发的开源框架。其主要目…...
Qt 完成图片的缩放拖动
1. 事件和函数 主要使用事件paintEvent(QPaintEvent *event)和drawTiledPixmap函数实现绘图。 paintEvent事件在改变窗口大小、移动窗口、手动调用update等情形下会被调用。需先了解下绘图该函数的用法。 - QPainter::drawTiledPixmap(int x, int y, int w, int h, const QPi…...
Linux 内核工具 iptables 配置TCP/UDP端口转发(命令参考)
1、配置TCP端口转发 把本机20000/TCP端口转发到7.7.7.7:20000 iptables -t nat -A PREROUTING -p tcp --dport 20000 -j DNAT --to-destination 7.7.7.7:20000 iptables -t nat -A POSTROUTING -j MASQUERADE 2、配置UDP端口转发 把本机20000/UDP端口转发到7.7.7.7:20000 i…...
love 2d Lua 俄罗斯方块超详细教程
源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/love2d-game.git 一直在找Lua 能快速便捷实现图形界面的软件,找了一堆,终于发现love2d是小而美的原生lua图形界面实现的方式。 并参考相关教程做了一个更详细的&#x…...
SpringBoot+ElasticSearch实现文档内容抽取、高亮分词、全文检索
需求 产品希望我们这边能够实现用户上传PDF、WORD、TXT之内得文本内容,然后用户可以根据附件名称或文件内容模糊查询文件信息,并可以在线查看文件内容。 一、环境 项目开发环境: 后台管理系统springbootmybatis_plusmysqles 搜索引擎&#…...
利用Redis实现简单的短信登录
在现代应用中,短信登录是一种常见的用户认证方式。它提供了一种便捷的登录方式,同时也增加了账户的安全性。在本文中,我们将介绍如何使用 Redis 实现短信登录的功能,并提供相应的 Java 实现层代码。 1、短信验证码的生成与存储当用…...
在 Linux 中通过 SSH 执行远程命令时,无法自动加载环境变量(已解决)
问题场景 目前我的环境变量都存储在 /etc/profile 文件中,当我通过远程 SSH 执行一些命令时,提示命令找不到,如下所示: 问题出现原因 这里找到了一张出自尚硅谷的图片,很好的解释了该问题: 这是由于 Linu…...
c++使用类的一些注意事项
前言: 本篇内容为前面的补充,介绍了我们使用类时需要注意些什么以及一些编译器的优化,可能有些理解不到位或者错误,请斧正。 目录 前言: 1.再谈构造函数 2.(c98)隐式类型转换中的编译器的优…...
C++蓝桥考级一级到十八级的考点内容整理
以下是C蓝桥考级一级到十八级的考点内容整理: C一级考点内容 C程序基本结构 初步了解C编程了解C程序基本结构:头文件、命名空间、主函数、基本输入输出 cin、cout C二级考点内容 数据类型与变量 掌握编程中数学表达式的计算方式基础数据类型、变量的…...
C++智能指针简单剖析
导读 最近在补看《C Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shar…...
mysql笔记:25. docker环境中mysql主从复制、主主复制实操
文章目录 一、准备工作1. 安装配置Docker2. 准备MySQL相关的配置和数据目录 二、基于日志点的主从复制1. 配置Master服务器1.1 修改配置文件1.2. 在docker中启动Master节点1.3. 创建用户并授权 2. 配置Slave1服务器2.1. 修改配置2.2. 启动服务2.3. 指定Master2.4. 开始复制 3. …...
大数据面试专题 -- kafka
1、什么是消息队列? 是一个用于存放数据的组件,用于系统之间或者是模块之间的消息传递。 2、消息队列的应用场景? 主要是用于模块之间的解耦合、异步处理、日志处理、流量削峰 3、什么是kafka? kafka是一种基于订阅发布模式的…...
深度学习入门简单实现一个神经网络
实现一个三层神经网络 引言测试数据 代码 引言 今天我们实现一个简单的神经网络 俩个输入神经元 隐藏层两个神经元 一个输出神经元 激活函数我们使用sigmoid 优化方法使用梯度下降 我们前期准备是需要把这些神经元的关系理清楚 x1:第一个输入 x2:第二个…...
win11 环境配置 之 Jmeter(JDK17版本)
一、安装 JDK 1. 安装 jdk 截至当前最新时间: 2024.3.27 jdk最新的版本 是 官网下载地址: https://www.oracle.com/java/technologies/downloads/ 建议下载 jdk17 另存为到该电脑的 D 盘下,新建jdk文件夹 开始安装到 jdk 文件夹下 2. 配…...
Windows下载使用nc(netcat)命令
‘nc’ 不是内部或外部命令,也不是可运行的程序? 点击链接地址,下载压缩包。 完成后解压 使用方式(三种): 1、直接双击exe使用 2、把这个exe放到cmd启动的默认路径下 放到默认路径下,使用nc&a…...
istio 设置 istio-proxy sidecar 的 resource 的 limit 和 request
方式一 修改 configmap 查看当前 sidecar 的 cpu 和 memory 的配额 在 istio-sidecar-injector 中查找,修改后重启 pod 可以生效(下面那个 proxy_init 配置不管,不知道是干嘛的) 方式二 如果是通过 iop 安装的 istio…...
flutter弹框
alertDialog:弹框 simpleDialog:选择弹框 showModalBottomSheet:底部弹出弹框 showtoast:三方插件弹框 Navigator.of(context).pop(点击取消) 关闭弹框,传递参数 import package:flutter/material.dart; // import package:flutter/cupertino.dart; import package:flut…...
2013年认证杯SPSSPRO杯数学建模B题(第一阶段)流行音乐发展简史全过程文档及程序
2013年认证杯SPSSPRO杯数学建模 B题 流行音乐发展简史 原题再现: 随着互联网的发展,流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好,自动推荐并播放其它音乐。由于每个人喜好…...
代码随想录算法训练营第39天 | 62.不同路径, 63不同路径II
Leetcode - 62:不同路径 题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” &#…...
Redis 的慢日志
Redis 的慢日志 Redis 的慢日志(Slow Log)是用于记录执行时间超过预设阈值的命令请求的系统。慢日志可以帮助运维人员和开发人员识别潜在的性能瓶颈,定位那些可能导致 Redis 性能下降或响应延迟的慢查询。以下是 Redis 慢日志的相关细节&…...
CMake+vcpkg环境配置避坑指南:从命令行到GUI的完整流程
CMakevcpkg环境配置避坑指南:从命令行到GUI的完整流程 刚接触C/C开发的工程师们,往往会在环境配置阶段经历"从入门到放弃"的心路历程。面对复杂的依赖库管理、跨平台编译问题,以及各种晦涩的错误提示,不少开发者甚至还没…...
[OS] 非阻塞键盘输入检测(kbhit)在实时交互应用中的实现与优化
1. 为什么需要非阻塞键盘输入检测? 想象一下你在玩一个简单的终端游戏,比如贪吃蛇。如果游戏在每次等待你按键时都暂停执行,直到你按下某个键才继续,那体验会有多糟糕?这就是阻塞式输入的问题——程序会卡在输入等待环…...
Node.js 环境避坑指南:从零搞定 Fetch MCP 依赖安装与构建 (Windows/macOS)
Node.js 环境避坑指南:从零搞定 Fetch MCP 依赖安装与构建 在开发者的日常工作中,遇到环境配置问题就像程序员遇到bug一样常见。特别是对于刚接触Node.js生态的前端新手,或是需要在不同操作系统间切换的开发者来说,一个看似简单的…...
春联生成模型-中文-base多线程批量生成教程,为公司百名员工定制春节祝福
春联生成模型-中文-base多线程批量生成教程,为公司百名员工定制春节祝福 春节将至,为公司员工准备个性化春联是传递祝福的好方式。传统手工创作耗时耗力,而春联生成模型-中文-base结合多线程技术,能高效完成批量定制。本文将详细…...
Alibaba DASD-4B Thinking 入门:卷积神经网络(CNN)原理交互式学习与答疑
Alibaba DASD-4B Thinking 入门:卷积神经网络(CNN)原理交互式学习与答疑 你是不是觉得卷积神经网络听起来就很高深,那些卷积核、池化、感受野的概念,光看文字解释就头大?别担心,这几乎是每个初…...
Open Images数据集完全指南:从零开始构建计算机视觉应用
Open Images数据集完全指南:从零开始构建计算机视觉应用 【免费下载链接】dataset The Open Images dataset 项目地址: https://gitcode.com/gh_mirrors/dat/dataset Open Images数据集是谷歌推出的一个大规模计算机视觉数据集,包含约900万张图像…...
RTX 4090D 24G镜像一文详解:PyTorch 2.8预装xFormers/FlashAttention-2实战
RTX 4090D 24G镜像一文详解:PyTorch 2.8预装xFormers/FlashAttention-2实战 1. 镜像概述与核心优势 PyTorch 2.8深度学习镜像为RTX 4090D 24GB显卡量身打造,经过CUDA 12.4深度优化,提供开箱即用的高性能计算环境。这个镜像特别适合需要处理…...
Comsol异构电池力电热耦合模型:探索电池的多场奥秘
comsol异构电池力电热耦合模型 采用椭圆型电极颗粒模拟锂离子正负极的电极颗粒,还原真实电池的3D介观结构,耦合电化学场-热场-力学场,可模拟电流,浓度,温度,应力等多场结果在电池研究领域,深入理…...
网页在线编辑 Office 实现|软航控件集成入门实战①
在 OA、ERP、管理系统开发中,网页在线编辑 Office、在线预览 Word/Excel/PPT/PDF是高频刚需。自己从零开发兼容性差、周期长,集成成熟控件是最快、最稳的方案。本文以软航 Office 文档控件为例,从零到一教你完成 Windows 端集成,新…...
从Pikachu靶场实战解析越权漏洞:原理、攻击与防御
1. 越权漏洞:Web安全的隐形杀手 第一次接触越权漏洞是在三年前的一次渗透测试中,当时客户系统有个"查看订单详情"的功能,我无意间发现修改URL中的订单ID就能看到别人的订单信息。这种看似简单的漏洞,实际上危害极大——…...
