一文读懂SpringBoot整合Elasticsearch(一)
(本篇文章主要介绍Spring Boot如何整合Elasticsearch,包括基本配置、数据操作、搜索功能等方面。)
一、前言
Elasticsearch是一款全文搜索引擎,可用于快速、准确地存储、搜索和分析大量数据。而Spring Boot是一款快速开发框架,它提供了简单易用的方式来构建Web应用程序。本文将介绍如何使用Spring Boot整合Elasticsearch,实现快速、高效地存储和搜索数据的功能。
二、环境准备
在开始整合Elasticsearch之前,需要确保已经安装了Java开发环境和Elasticsearch服务。可以从官方网站下载最新版本的Java和Elasticsearch。
三、引入依赖
Spring Boot整合Elasticsearch需要引入以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
四、基本配置
在application.properties文件中添加以下配置信息:
kotlinCopy codespring.data.elasticsearch.cluster-name=my-application
spring.data.elasticsearch.cluster-nodes=localhost:9300
其中,cluster-name是Elasticsearch集群的名称,cluster-nodes是Elasticsearch服务的地址和端口号。
数据操作
- 创建实体类
首先需要创建一个实体类,用来表示要存储在Elasticsearch中的数据。例如,创建一个名为Book的实体类,包含id、title、author、content等属性。
public class Book {private Long id;private String title;private String author;private String content;//省略getter和setter方法
}
2 创建ElasticsearchRepository
在Spring Boot中,可以使用ElasticsearchRepository来操作Elasticsearch。创建一个名为BookRepository的接口,继承ElasticsearchRepository,指定实体类和主键类型。例如:
public interface BookRepository extends ElasticsearchRepository<Book, Long> {
}
3 数据操作
现在可以使用BookRepository来对Elasticsearch中的数据进行操作。例如,可以使用save方法将一个Book对象保存到Elasticsearch中。
@Autowired
private BookRepository bookRepository;Book book = new Book();
book.setId(1L);
book.setTitle("Java编程思想");
book.setAuthor("Bruce Eckel");
book.setContent("Java编程思想是一本Java经典著作。");
bookRepository.save(book);
四、搜索功能
- 创建查询接口
首先需要创建一个查询接口,用来定义查询方法。例如,创建一个名为BookService的接口,包含一个名为search的方法,用来根据关键词查询数据。
public interface BookService {List<Book> search(String keyword);
}
2 创建查询实现类
接着需要创建一个查询实现类,实现BookService接口中的search方法。在实现类中注入BookRepository,使用它来查询Elasticsearch中的数据。
@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookRepository bookRepositoryOverride
public List<Book> search(String keyword) {SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery(keyword)).build();return bookRepository.search(searchQuery).getContent();
}
在上面的代码中,首先创建了一个SearchQuery对象,它表示查询条件。使用NativeSearchQueryBuilder来构建查询条件,其中withQuery方法接受一个QueryBuilder对象作为参数,用来指定查询语句。这里使用了queryStringQuery方法来构建一个基于关键词的查询语句。 然后,使用bookRepository.search方法来执行查询,返回一个Page对象。调用getContent方法可以获取查询结果。
3. 测试搜索功能
现在可以测试搜索功能了。例如,执行以下代码:
@Autowired
private BookService bookService;List<Book> books = bookService.search("Java");
for (Book book : books) {
System.out.println(book.getTitle());
}
这段代码会查询所有标题包含“Java”的图书,并将它们的标题打印出来。
五、总结
本文介绍了Spring Boot如何整合Elasticsearch,包括基本配置、数据操作、搜索功能等方面。通过Spring Boot整合Elasticsearch,可以方便快捷地实现数据存储和搜索功能。
六、常见问题解决
在整合Elasticsearch的过程中,可能会遇到一些常见的问题。下面是一些解决方法:
- Elasticsearch服务无法连接
如果在运行Spring Boot应用程序时遇到“Elasticsearch服务无法连接”的错误,请确保已经启动Elasticsearch服务,并检查application.properties文件中的cluster-nodes配置是否正确。
2 无法创建索引
如果在使用ElasticsearchRepository保存数据时遇到“无法创建索引”的错误,请检查实体类的注解是否正确,例如是否添加了@Document注解,并指定了indexName和type。
3 搜索结果为空
如果在执行搜索时返回空结果,请检查查询条件是否正确。可以使用Kibana工具来查看Elasticsearch中的数据,并尝试使用Kibana来执行查询语句,以确定查询语句是否正确。
4 分页查询问题
如果想要实现分页查询功能,可以使用Spring Data提供的Pageable接口来实现。例如:
Pageable pageable = PageRequest.of(pageNumber, pageSize);
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery(keyword)).withPageable(pageable).build();
return bookRepository.search(searchQuery).getContent();
这里使用了PageRequest.of方法来创建一个Pageable对象,并将它传递给NativeSearchQueryBuilder的withPageable方法。
七、总结
本文介绍了Spring Boot如何整合Elasticsearch,包括基本配置、数据操作、搜索功能等方面。通过Spring Boot整合Elasticsearch,可以方便快捷地实现数据存储和搜索功能。在实践中可能会遇到一些常见问题,需要注意解决。
八、参考资料
- Spring Data Elasticsearch官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/
- Elasticsearch官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
- Spring Boot官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
- Spring官方文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/index.html
- Kibana官方文档:https://www.elastic.co/guide/en/kibana/current/index.html
九、结语
本文通过实例演示了Spring Boot如何整合Elasticsearch,并介绍了基本配置、数据操作、搜索功能等方面的知识。通过这些内容,读者可以快速上手使用Spring Boot和Elasticsearch来构建数据存储和搜索应用程序。
当然,本文只是一个入门级别的介绍,读者可以深入学习Spring Boot和Elasticsearch的更多知识,来构建更为复杂的应用程序。希望读者在学习过程中能够积极思考,不断提高自己的技能和能力。

相关文章:
一文读懂SpringBoot整合Elasticsearch(一)
(本篇文章主要介绍Spring Boot如何整合Elasticsearch,包括基本配置、数据操作、搜索功能等方面。) 一、前言 Elasticsearch是一款全文搜索引擎,可用于快速、准确地存储、搜索和分析大量数据。而Spring Boot是一款快速开发框架&a…...
(数论)(枚举)(前缀和)1230. K倍区间
目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 1230. K倍区间 - AcWing题库 ~数~啦!我草,又~在~水~字~数~啦!我草,又~在~水&…...
万字带你深入理解 Linux 虚拟内存管理(下)
接上文:万字带你深入理解 Linux 虚拟内存管理(上) 6. 程序编译后的二进制文件如何映射到虚拟内存空间中 经过前边这么多小节的内容介绍,现在我们已经熟悉了进程虚拟内存空间的布局,以及内核如何管理这些虚拟内存区域&…...
【iOS】—— JSONModel源码学习
JSONModel 文章目录JSONModel关于JSONModel的用法initWithDictionary等方法load方法实现load方法调用时机init方法__setup__方法__inspectProperties:方法__doesDictionary方法__importDictionary方法关于JSONModel的用法 可以参考之前写的博客:【iOS】—— JSONMo…...
单片机怎么实现真正的多线程?
所谓多线程都是模拟的,本质都是单线程,因为cpu同一时刻只能执行一段代码。模拟的多线程就是任务之间快速切换,看起来像同时执行的样子。据说最近有多核的单片机,不过成本应该会高很多。对于模拟的多线程,我知道的有两种…...
【LeetCode】剑指 Offer(23)
目录 题目:剑指 Offer 46. 把数字翻译成字符串 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 46. 把…...
[免费专栏] 汽车威胁狩猎之不应该相信的几个威胁狩猎误区
也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 汽车威胁狩猎专栏长期更新,本篇最新内容请前往: …...
LinuxFTP文件传输服务和DNS域名解析服务
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
二叉搜索树原理及底层实现
二叉搜索树BST 概念 二叉搜索树又称二叉排序树,它可以是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都…...
python自动化办公(一)
本文代码参考其他教程书籍实现。 文章目录文件读写open函数读取文本文件写入文本文件文件和目录操作使用os库使用shutil库文件读写 open函数 open函数有8个参数,常用前4个,除了file参数外,其他参数都有默认值。file指定了要打开的文件名称&a…...
LeetCode - 198 打家劫舍
目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 198. 打家劫舍 - 力扣(LeetCode) 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装…...
简单粗暴的分布式定时任务解决方案
分布式定时任务1.为什么需要定时任务?2.数据库实现分布式定时任务3.基于redis实现1.为什么需要定时任务? 因为有时候我们需要定时的执行一些操作,比如业务中产生的一些临时文件,临时文件不能立即删除,因为不清楚用户是…...
蓝桥杯第五天刷题
第一题:数的分解题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2和 4,一共有多少种不同的分解方法&…...
Java数组的定义和使用(万字详解)
目录 编辑 一. 数组的基本概念 1、什么是数组 2、数组的创建及初始化 1、数组的创建 2、数组的初始化 3、数组的使用 (1)数组中元素访问 (3)遍历数组 二、数组是引用类型 1、初始JVM的内存分布 2、基本类型变量与引用类…...
【SpringBoot】自定义Starter
🚩本文已收录至专栏:Spring家族学习之旅 👍希望您能有所收获 一.概述 在使用SpringBoot进行开发的时候,我们发现使用很多技术都是直接导入对应的starter,然后就实现了springboot整合对应技术,再加上一些简…...
【C陷阱与缺陷】----语法陷阱
💯💯💯 要理解一个C程序,必须理解这些程序是如何组成声明,表达式,语句的。虽然现在对C的语法定义很完善,几乎无懈可击,大门有时这些定义与人们的直觉相悖,或容易引起混淆…...
虹科分享| 关于TrueNAS十问十答
上一篇文章我们向您介绍了虹科新品HK-TrueNAS企业存储,很多小伙伴会疑问到底什么是NAS存储,之前常用的磁盘、磁带属于什么存储架构,NAS存储好在哪里,什么时候使用NAS?今天我们整理了关于TrueNAS的十问十答,…...
Https 笔记
HTTP TLS TLS 的前身是 SSL 非对称加密的核心: 两个密钥(公私) https 需要第三方CA(证书授权中心)申请SSL证书以确定其真实性 证书种包含了特定的公钥和私钥 密钥交换 自己将私钥上锁后发给对方对方也上锁 在还回来…...
【Python+requests+unittest+excel】实现接口自动化测试框架
一、框架结构: 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…...
MySQL终端的使用及其数据类型的使用
什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,…...
相机潜能解锁:从限制突破到专业创作
相机潜能解锁:从限制突破到专业创作 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak OpenMemories-Tweak作为一款专为索尼相机设计的系统级解锁工具,通…...
英雄联盟智能工具League Akari:提升游戏体验的终极指南
英雄联盟智能工具League Akari:提升游戏体验的终极指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari是…...
SYNBO AMA 回顾|当稳定币突破 3000 亿,一级的“钱”到底在往哪里流?
一、 聊了什么:背景与主题时间:2026 Mar 25 (Wed) 20:00 UTC8主题: Stablecoins Primary Market: The New Capital Stack Powering Global Payments in 2026在昨晚举行的一场围绕“稳定币、PayFi 与全球支付”的 AMA 中,SYNBO 与…...
避坑指南:用ESP32驱动LD2420毫米波雷达时,串口数据丢失和自动开机卡死的那些事儿
ESP32与LD2420毫米波雷达深度避坑实战:从数据丢失到系统卡死的全链路解决方案 当你在凌晨三点盯着逻辑分析仪上那些残缺的串口波形时,就会明白为什么LD2420毫米波雷达被称为"最熟悉的陌生人"。这个能穿透墙壁感知呼吸的24GHz传感器,…...
51单片机定时器初值计算与Proteus仿真
51单片机定时器初值计算方法详解1. 定时器基础原理1.1 单片机定时器工作模式51系列单片机内置的定时器/计数器模块是嵌入式系统中实现精确时间控制的核心部件。定时器本质上是一个特殊功能的寄存器,通过累加时钟脉冲实现计时功能。根据位数不同,51单片机…...
BERT-base-uncased完全指南:从基础原理到实战应用
BERT-base-uncased完全指南:从基础原理到实战应用 【免费下载链接】bert-base-uncased 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/bert-base-uncased 一、认知铺垫:为什么BERT改变了NLP格局? 1.1 BERT的突破性意义何…...
揭秘League Akari:如何通过LCU API革新英雄联盟游戏体验?
揭秘League Akari:如何通过LCU API革新英雄联盟游戏体验? 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …...
手把手教你用Hive SQL搞定电影评分数据分析(附完整数据集和避坑指南)
手把手教你用Hive SQL搞定电影评分数据分析(附完整数据集和避坑指南) "为什么《肖申克的救赎》常年霸占IMDb Top 250榜首?"这个问题背后隐藏着海量用户评分数据的秘密。作为数据分析师,我们如何从原始评分数据中挖掘出这…...
手把手教你用4G Cat.1 bis开发智能硬件:从电路设计到低功耗优化的完整实战
4G Cat.1 bis智能硬件开发实战:从电路设计到低功耗优化的全流程指南 在共享充电宝扫码即用的便利背后,隐藏着一场关于低功耗通信的技术革命。当传统4G模块因高功耗让硬件开发者束手无策时,4G Cat.1 bis以单天线设计、10Mbps传输速率和μA级待…...
League-Toolkit:英雄联盟智能助手的全方位解决方案
League-Toolkit:英雄联盟智能助手的全方位解决方案 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联盟…...
