一文读懂SpringBoot整合Elasticsearch(一)

news2025/1/18 3:56:23

(本篇文章主要介绍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服务的地址和端口号。

数据操作

  1. 创建实体类

首先需要创建一个实体类,用来表示要存储在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);

四、搜索功能

  1. 创建查询接口

首先需要创建一个查询接口,用来定义查询方法。例如,创建一个名为BookService的接口,包含一个名为search的方法,用来根据关键词查询数据。

public interface BookService {
    List<Book> search(String keyword);
}

2 创建查询实现类

接着需要创建一个查询实现类,实现BookService接口中的search方法。在实现类中注入BookRepository,使用它来查询Elasticsearch中的数据。

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookRepository bookRepository
  Override
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的过程中,可能会遇到一些常见的问题。下面是一些解决方法:

  1. 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,可以方便快捷地实现数据存储和搜索功能。在实践中可能会遇到一些常见问题,需要注意解决。

八、参考资料

  1. Spring Data Elasticsearch官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/
  2. Elasticsearch官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
  3. Spring Boot官方文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
  4. Spring官方文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/index.html
  5. Kibana官方文档:https://www.elastic.co/guide/en/kibana/current/index.html

九、结语

本文通过实例演示了Spring Boot如何整合Elasticsearch,并介绍了基本配置、数据操作、搜索功能等方面的知识。通过这些内容,读者可以快速上手使用Spring Boot和Elasticsearch来构建数据存储和搜索应用程序。

当然,本文只是一个入门级别的介绍,读者可以深入学习Spring Boot和Elasticsearch的更多知识,来构建更为复杂的应用程序。希望读者在学习过程中能够积极思考,不断提高自己的技能和能力。

 

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

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

相关文章

JUC【Callable、ReentrantLock、Semaphore、CountDownLatch】

JUC > java.util.concurrent JUC标准库提供的多线程安全相关的包 Callable 接口声明带返回值的任务 类似于Runnable,都是用来描述这个线程的工作的。 Callable描述的任务带返回值&#xff0c;Runnable描述的任务不带返回值 区别&#xff1a;线程封装了一个 “返回值”&#…

【项目精选】基于网络爬虫技术的网络新闻分析(视频+论文+源码)

点击下载源码 基于网络爬虫技术的网络新闻分析主要用于网络数据爬取。本系统结构如下&#xff1a; &#xff08;1&#xff09;网络爬虫模块。 &#xff08;2&#xff09;中文分词模块。 &#xff08;3&#xff09;中3文相似度判定模块。 &#xff08;4&#xff09;数据结构化存…

【Python - Matplotlib】P2 plot 折线图

Matplotlib绘制折线图折线图完整代码与效果基础折线图设定横纵坐标设置中文显示添加网格添加描述信息再添加一个城市设置两个折线图前言 上一节内容主要围绕介绍 Matplotlib 的画板结构。 链接&#xff1a;https://blog.csdn.net/weixin_43098506/article/details/129331576 本…

云HIS系统 云his系统源码 基于电子病历的医院信息平台标准建设

云HIS系统 云his系统源码 基于电子病历的医院信息平台标准进行建设 云HIS系统采用SaaS软件应用服务模式&#xff0c;提供软件应用服务多租户机制&#xff0c;实现一中心部署多机构使用。相对传统HIS单机构应用模式&#xff0c;它可灵活应对区域医疗、医疗集团、医联体、连锁诊…

GB28181国标平台LiveGBS视频统一汇聚后如何获取固定的播放地址,实现监控视频Web页面无插件播放、拉流分析、上大屏等目的...

目前汇聚各种厂家监控设备的视频汇聚平台&#xff0c;基本都是通过GB28181标准协议实现的。下面介绍下LiveGBS Web无插件直播的GB28181视频平台将各厂家(包括海康、大华、华为、宇视、天地伟业等)监控汇聚到同一个服务器上后&#xff0c;如何或者直播链接可以直播浏览器播放&am…

flstudio21水果language选项中文设置方法教程

编曲是通过DAW&#xff08;数字音频工作站软件&#xff09;完成的&#xff0c;也就是我们常说的宿主软件。现在有很多优秀的宿主软件&#xff0c;例如Cubase、Studio One、FL Studio等。 FL Studio是一款功能强大的音乐制作软件&#xff0c;也被称为FruityLoops。目前已经推出…

Android上传手机图片到服务器(这篇你要是看不懂,全网没你可以看懂的了!!!)

Android上传手机图片到服务器1、整体流程2、页面布局3、选择图片流程实现演示结果完整代码4、路径转换路径转换Utils工具类权限申请完整代码5、创建文件6、服务器端7、传输8、演示9、完整代码目录结构AndroidManifest.xml布局文件activity_main.xml传输文件工具类HttpUtil路径转…

蓝桥杯-质因数个数

蓝桥杯-质因数个数1、问题描述2、解题思路2.1 质数判断2.2 求取因子3、完整代码实现1、问题描述 给定正整数 n, 请问有多少个质数是 n 的约数。 输入格式 输入的第一行包含一个整数 n。 输出格式 输出一个整数, 表示 n 的质数约数个数。 样例输入 396样例输出 3样例说明 3…

【教学典型案例】13.学情页面逻辑问题

目录一&#xff1a;背景介绍二&#xff1a;LocalStorage缓存①localStorage是什么&#xff1f;②如何使用localStorage缓存三&#xff1a;学情页面逻辑分析过程四&#xff1a;总结五&#xff1a;升华一&#xff1a;背景介绍 使用的前端技术是Vue2&#xff0c;前端逻辑&#xf…

SpringCloud:Eureka

目录 一、eureka的作用 二、搭建Eureka服务端 三、添加客户端 四、服务发现 提供者与消费者 服务提供者&#xff1a;一次业务中&#xff0c;被其它微服务调用的服务。&#xff08;提供接口给其它微服务) 服务消费者&#xff1a;一次业务中&#xff0c;调用其它微服务的服…

[1.1_2]计算机系统概述——操作系统的四个特征

文章目录第一章 计算机系统概述操作系统的特征&#xff08;一&#xff09;并发&#xff08;二&#xff09;共享并发和共享的关系&#xff08;三&#xff09;虚拟&#xff08;四&#xff09;异步小结第一章 计算机系统概述 操作系统的特征 操作系统的四个特征 并发共享 并发和共…

Linux学习第七节-SUID、SGID、SBIT特殊权限

1.SetUID特殊权限 setUID (SUID): 对于一个可执行的文件使用SUID权限后&#xff0c;普通用户在执行改文件后&#xff0c;临时拥有文件所有者的身份&#xff0c;该权限只在程序执行过程中有效&#xff0c;程序执行完毕后用户恢复原有身份。 SetUID权限会附加在所有者的x权限位上…

每日分享(2023最新文件快递柜系统网站源码 匿名口令分享临时文件分享)

​demo软件园每日更新资源,请看到最后就能获取你想要的: 1.UML参考手册(第二版) 中文 中文名: UML参考手册&#xff08;第二版&#xff09;原名: The Unified Modeling Language Reference Manual(2nd Edition) 作者: James Rumbaugh Ivar Jacobson Grady Booch译者: UML Ch…

汇编语言程序设计(二)之寄存器

系列文章 汇编语言程序设计&#xff08;一&#xff09; 寄存器 在学习汇编的过程中&#xff0c;我们经常需要操作寄存器&#xff0c;那么寄存器又是什么呢&#xff1f;它是用来干什么的&#xff1f; 它有什么分类&#xff1f;又该如何操作&#xff1f;… 你可能会有许多的…

基于PySide6的MySql数据库快照备份与恢复软件

db-camera 软件介绍 db-camera是一款MySql数据库备份&#xff08;快照保存&#xff09;与恢复软件。功能上与dump类似&#xff0c;但是提供了相对有好的交互界面&#xff0c;能够有效地管理导出的sql文件。 使用场景 开发阶段、测试阶段&#xff0c;尤其适合单人开发的小项目…

降低物联网开发门槛的神器大更新!TuyaOS 3.7.0版本新增matter等开发框架

作为降低物联网开发门槛的TuyaOS &#xff0c;此次迎来了重大更新&#xff08;点击查看TuyaOS 往期介绍&#xff09;&#xff01;TuyaOS 3.7.0 新版本不仅支持多款 Matter 开发框架&#xff0c;帮助开发者轻松奔赴万物互联时代&#xff0c;还覆盖多种协议连接&#xff0c;能快速…

【Simulink】单相电压型全桥逆变电路仿真基础实验

版本&#xff1a;matlab2019b 1 单相电压型全桥逆变电路简介 1.1 逆变 逆变&#xff0c;即直流变换成交流。 在全桥逆变电路中&#xff1a;V1、V2、V3、V4 为 IGBT&#xff0c;VD1、VD2、VD3、VD4为二极管 当V1、V4导通&#xff0c;V2、V3截止时&#xff0c;负载电压uo为正&a…

【CV学习笔记】之ncnnFastDet多线程c++部署

1、前言 ncnn是一款非常高效易用的深度学习推理框架&#xff0c;支持各种神经网络模型&#xff0c;如pytorch、tensorflow、onnx等&#xff0c;以及多种硬件后端&#xff0c;如x86、arm、riscv、mips、vulkan等。 ncnn项目地址:https://github.com/Tencent/ncnn FastDet是设计…

English Learning - L2 第2次小组纠音 [iː] [ɜː] [æ] 2023.3.1 周三

English Learning - L2 第2次小组纠音 [iː] [ɜː] [] 2023.3.1 周三共性问题分析前元音 [iː]中元音 [ɜː]前元音 []我的发音问题舌位找的不准纠音过程共性问题分析 前元音 [iː] 嘴角左右拉伸没有到位 解决方法&#xff1a; 嘴角是往耳后根的方向&#xff0c;微微上扬的角…

指针和数组面试题(逐题分析,完善你可能遗漏的知识)

人生不是一种享乐&#xff0c;而是一桩十分沉重的工作。 —— 列夫托尔斯泰 前言&#xff1a;之前我们就学习了数组和指针的知识。 数组&#xff1a;数组就是能够存放一组相同类型的元素&#xff0c;数组的大小取决于数组的元素个数和元素类型。 指针&#xff1a;…