当前位置: 首页 > news >正文

一文读懂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服务的地址和端口号。

数据操作

  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 {@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的过程中,可能会遇到一些常见的问题。下面是一些解决方法:

  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的更多知识,来构建更为复杂的应用程序。希望读者在学习过程中能够积极思考,不断提高自己的技能和能力。

 

相关文章:

一文读懂SpringBoot整合Elasticsearch(一)

&#xff08;本篇文章主要介绍Spring Boot如何整合Elasticsearch&#xff0c;包括基本配置、数据操作、搜索功能等方面。&#xff09; 一、前言 Elasticsearch是一款全文搜索引擎&#xff0c;可用于快速、准确地存储、搜索和分析大量数据。而Spring Boot是一款快速开发框架&a…...

(数论)(枚举)(前缀和)1230. K倍区间

目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 1230. K倍区间 - AcWing题库 &#xff5e;数&#xff5e;啦&#xff01;我草&#xff0c;又~在&#xff5e;水&#xff5e;字&#xff5e;数&#xff5e;啦&#xff01;我草&#xff0c;又~在&#xff5e;水&…...

万字带你深入理解 Linux 虚拟内存管理(下)

接上文&#xff1a;万字带你深入理解 Linux 虚拟内存管理&#xff08;上&#xff09; 6. 程序编译后的二进制文件如何映射到虚拟内存空间中 经过前边这么多小节的内容介绍&#xff0c;现在我们已经熟悉了进程虚拟内存空间的布局&#xff0c;以及内核如何管理这些虚拟内存区域&…...

【iOS】—— JSONModel源码学习

JSONModel 文章目录JSONModel关于JSONModel的用法initWithDictionary等方法load方法实现load方法调用时机init方法__setup__方法__inspectProperties:方法__doesDictionary方法__importDictionary方法关于JSONModel的用法 可以参考之前写的博客&#xff1a;【iOS】—— JSONMo…...

单片机怎么实现真正的多线程?

所谓多线程都是模拟的&#xff0c;本质都是单线程&#xff0c;因为cpu同一时刻只能执行一段代码。模拟的多线程就是任务之间快速切换&#xff0c;看起来像同时执行的样子。据说最近有多核的单片机&#xff0c;不过成本应该会高很多。对于模拟的多线程&#xff0c;我知道的有两种…...

【LeetCode】剑指 Offer(23)

目录 题目&#xff1a;剑指 Offer 46. 把数字翻译成字符串 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;剑指 Offer 46. 把…...

[免费专栏] 汽车威胁狩猎之不应该相信的几个威胁狩猎误区

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 汽车威胁狩猎专栏长期更新&#xff0c;本篇最新内容请前往&#xff1a; …...

LinuxFTP文件传输服务和DNS域名解析服务

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…...

二叉搜索树原理及底层实现

二叉搜索树BST 概念 二叉搜索树又称二叉排序树&#xff0c;它可以是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a;若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b;若它的右子树不为空&#xff0c;则右子树上所有节点的值都…...

python自动化办公(一)

本文代码参考其他教程书籍实现。 文章目录文件读写open函数读取文本文件写入文本文件文件和目录操作使用os库使用shutil库文件读写 open函数 open函数有8个参数&#xff0c;常用前4个&#xff0c;除了file参数外&#xff0c;其他参数都有默认值。file指定了要打开的文件名称&a…...

LeetCode - 198 打家劫舍

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装…...

简单粗暴的分布式定时任务解决方案

分布式定时任务1.为什么需要定时任务&#xff1f;2.数据库实现分布式定时任务3.基于redis实现1.为什么需要定时任务&#xff1f; 因为有时候我们需要定时的执行一些操作&#xff0c;比如业务中产生的一些临时文件&#xff0c;临时文件不能立即删除&#xff0c;因为不清楚用户是…...

蓝桥杯第五天刷题

第一题&#xff1a;数的分解题目描述本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。把 2019 分解成 3 个各不相同的正整数之和&#xff0c;并且要求每个正整数都不包含数字 2和 4&#xff0c;一共有多少种不同的分解方法&…...

Java数组的定义和使用(万字详解)

目录 ​编辑 一. 数组的基本概念 1、什么是数组 2、数组的创建及初始化 1、数组的创建 2、数组的初始化 3、数组的使用 &#xff08;1&#xff09;数组中元素访问 &#xff08;3&#xff09;遍历数组 二、数组是引用类型 1、初始JVM的内存分布 2、基本类型变量与引用类…...

【SpringBoot】自定义Starter

&#x1f6a9;本文已收录至专栏&#xff1a;Spring家族学习之旅 &#x1f44d;希望您能有所收获 一.概述 在使用SpringBoot进行开发的时候&#xff0c;我们发现使用很多技术都是直接导入对应的starter&#xff0c;然后就实现了springboot整合对应技术&#xff0c;再加上一些简…...

【C陷阱与缺陷】----语法陷阱

&#x1f4af;&#x1f4af;&#x1f4af; 要理解一个C程序&#xff0c;必须理解这些程序是如何组成声明&#xff0c;表达式&#xff0c;语句的。虽然现在对C的语法定义很完善&#xff0c;几乎无懈可击&#xff0c;大门有时这些定义与人们的直觉相悖&#xff0c;或容易引起混淆…...

虹科分享| 关于TrueNAS十问十答

上一篇文章我们向您介绍了虹科新品HK-TrueNAS企业存储&#xff0c;很多小伙伴会疑问到底什么是NAS存储&#xff0c;之前常用的磁盘、磁带属于什么存储架构&#xff0c;NAS存储好在哪里&#xff0c;什么时候使用NAS&#xff1f;今天我们整理了关于TrueNAS的十问十答&#xff0c;…...

Https 笔记

HTTP TLS TLS 的前身是 SSL 非对称加密的核心&#xff1a; 两个密钥&#xff08;公私&#xff09; https 需要第三方CA&#xff08;证书授权中心&#xff09;申请SSL证书以确定其真实性 证书种包含了特定的公钥和私钥 密钥交换 自己将私钥上锁后发给对方对方也上锁 在还回来…...

【Python+requests+unittest+excel】实现接口自动化测试框架

一、框架结构&#xff1a; 工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求&#xff08;runmethon.py&#xff09; 1 import requests2 import json3 class RunMethod:4 def post_main(self,url,data,headerNone):5 res None6 if heade…...

MySQL终端的使用及其数据类型的使用

什么是数据库&#xff1f;数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建&#xff0c;访问&#xff0c;管理&#xff0c;搜索和复制所保存的数据。我们也可以将数据存储在文件中&#xff0c…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...