Spring Boot 集成 Elasticsearch入门教学

一、什么是 Elasticsearch (ES)?

Elasticsearch 是一个分布式搜索引擎,用来处理大规模数据的存储、搜索和分析。它是基于 Apache Lucene 构建的,具备高效的全文搜索功能。ES 可以在海量数据中快速找到匹配的内容,并且支持复杂的查询逻辑,非常适合用于日志分析、商品搜索、数据可视化等场景。

二、Elasticsearch 常用术语解释

  1. Index(索引):索引是 Elasticsearch 中数据存储的基本单位,相当于关系型数据库中的"表"。一个索引包含了多个 Document(文档),每个文档都有自己的字段和内容。

  2. Document(文档):文档是 ES 中存储的最小数据单元,相当于关系型数据库中的"行"。一个文档就是一条数据,通常以 JSON 格式存储。

  3. Field(字段):文档中的数据是以字段存储的。字段就像是数据库中的列,比如一个文档可能有 “title”, “author”, “content” 这样的字段。

  4. Mapping(映射):映射定义了索引中文档结构的模式。它类似于数据库中的表结构定义,规定了文档中的字段类型,如 string、integer、date 等。

  5. Cluster(集群):一个集群由一个或多个节点组成,提供高可用性和负载均衡的能力。集群有一个唯一的名字,每个节点加入集群时都必须使用相同的集群名字。

  6. Node(节点):每个运行的 Elasticsearch 实例称为一个节点。一个节点保存了数据,并且参与了索引和查询的处理过程。多个节点可以组成一个集群。

  7. Shards(分片):为了支持大规模的数据处理,ES 将数据分片存储,每个索引可以分成多个分片,并且分布在集群的多个节点上。这样,数据的读取和写入都可以并行处理。

  8. Replica(副本):每个分片都有其副本,副本提高了系统的容错能力和读取性能。当主分片不可用时,副本可以替代它提供服务。

  9. Analyzer(分析器):分析器是用于处理文本数据的组件,它包括分词器(tokenizer)和过滤器(filter)。分析器将文本分解为词条以便于索引和搜索。

三、Spring Boot 与 Elasticsearch 的集成

Spring Data Elasticsearch 是一个用于集成 Spring Boot 和 Elasticsearch 的模块,提供了一些简单的 CRUD 操作接口,以及对全文搜索和复杂查询的支持。

  1. 项目依赖
    首先,你需要在 Spring Boot 项目中添加对 Elasticsearch 的依赖。通过 Maven 可以这样添加依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
  1. 配置 Elasticsearch 连接
    Spring Boot 自动配置了 Elasticsearch 的基本配置,你可以通过 application.yml 文件来定义连接参数:
spring:elasticsearch:uris: http://localhost:9200  # ES 服务的地址username: elastic             # 用户名(如有安全设置)password: elastic             # 密码(如有安全设置)
  1. 定义实体类
    在 Spring Data Elasticsearch 中,我们需要定义一个实体类来映射 Elasticsearch 中的文档:
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;@Document(indexName = "blog")  // 指定索引名称
public class Blog {@Id  // 表示文档的唯一IDprivate String id;private String title;private String content;// 构造方法、getter、setter...
}
  1. 创建 Repository
    Spring Data 提供了 ElasticsearchRepository 接口,它提供了一些基础的增删查改方法。你可以创建一个 Repository 来管理 Blog 实体:
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface BlogRepository extends ElasticsearchRepository<Blog, String> {// 你可以根据需要自定义一些查询方法,比如根据标题查找List<Blog> findByTitle(String title);
}
  1. Service 层的使用
    在 Service 层,我们可以通过注入 BlogRepository 来操作 Elasticsearch 数据库:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;@Service
public class BlogService {@Autowiredprivate BlogRepository blogRepository;public void saveBlog(Blog blog) {blogRepository.save(blog);  // 保存数据}public List<Blog> searchByTitle(String title) {return blogRepository.findByTitle(title);  // 通过标题查询}
}
  1. 控制器层的简单实现
    在 Controller 中,可以通过 RESTful 接口来调用 Service 的方法,实现数据的存取:
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/blogs")
public class BlogController {@Autowiredprivate BlogService blogService;@PostMappingpublic String saveBlog(@RequestBody Blog blog) {blogService.saveBlog(blog);return "Blog saved!";}@GetMapping("/search")public List<Blog> searchBlogs(@RequestParam String title) {return blogService.searchByTitle(title);}
}

四、基本 CRUD 操作

创建文档:使用 blogRepository.save(blog) 来保存或更新文档;
查询文档:使用 blogRepository.findById(id) 来通过文档 ID 查询;
删除文档:使用 blogRepository.deleteById(id) 来删除指定文档;
全文搜索:使用 blogRepository.findByTitle(title) 来按字段查询文档。

五、进阶功能

分页查询:Spring Data Elasticsearch 还支持分页查询,使用 Pageable 对象进行分页。
复杂查询:可以使用 @Query 注解或自定义查询 DSL 来实现更复杂的搜索需求。
分词器和分析器:你可以自定义分词器以支持中文等复杂语言的全文检索。

六、注意事项

版本兼容性:Spring Data Elasticsearch 和 Elasticsearch 的版本需要兼容,不同版本之间的兼容性可能不同。
性能优化:分片与副本的合理设置、索引的优化、查询的缓存等可以提升 ES 的性能。
集群部署:在生产环境中,ES 一般会部署成集群,确保高可用和数据安全。
通过这个入门教程,你应该已经对 Spring Boot 与 Elasticsearch 的集成有了初步的了解。接下来,可以通过实际操作、扩展复杂查询、配置更多功能,深入学习 ES 的用法

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

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

相关文章

银河麒麟V10系统+Windows10双系统启动顺序正确修改方法

***正确可行方法***&#xff0c;测试OK且稳定&#xff1b; 银河麒麟桌面操作系统V10是一款适配国产软硬件平台并深入优化和创新的新一代图形化桌面操作系统&#xff0c;同源支持国内外主流处理器架构&#xff0c;并不断使能GPU、桥片、网卡等各种新硬件&#xff0c;提供更优的软…

vue3学习之插槽slot

关于slot web组件内部的占位符&#xff0c;可以使用自己的标记填充这个占位符 &#xff0c;具名插槽就是在slot标签上添加name属性&#xff08;https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/slot&#xff09; vue3官方文档&#xff1a;https://cn.vuejs.org/gui…

深入解析Java 22:专栏介绍

深入解析Java 22&#xff1a;专栏介绍 Java&#xff0c;作为一种广泛使用的编程语言&#xff0c;一直以来都在不断地发展和改进。2024年3月19日&#xff0c;Java 22的GA版本正式发布&#xff0c;带来了众多令人瞩目的新特性和性能优化。本专栏将深入解析Java 22&#xff0c;带…

AD9680(adc直采芯片)使用说明

写这篇文章之前我是没有使用过AD9680的芯片&#xff0c;但是使用过GMS011芯片&#xff08;是国内24S&#xff09;下的公司出来的芯片&#xff0c;寄存器和管脚全对标。 在这里我就大概说一下芯片的说用方法 一、硬件设计 该芯片支持双通道射频直采 支持协议JESD204B 14位 采样…

leetcode二叉树(五)-二叉树层序遍历

题目 102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7…

MySQL中FIND_IN_SET(),IN()和LIKE区别

在 MySQL 中&#xff0c; FIND_IN_SET() 和 LIKE 都可以用于字符串的匹配查找&#xff0c;但它们有以下不同&#xff1a; 一、语法及功能 1. FIND_IN_SET(str,strlist) &#xff1a; 用于在以逗号分隔的字符串列表中查找特定字符串&#xff0c;并返回其位置。如果未找到则返…

【网络篇】计算机网络——网络层详述(笔记)

目录 一、网络层 1. 网络传输流程简述 2. 转发和路由选择 3. 控制平面&#xff1a;SDN 方法 二、路由器工作原理 1. 概述 &#xff08;1&#xff09;输入端口 &#xff08;2&#xff09;交换结构 &#xff08;3&#xff09;输出端口 &#xff08;4&#xff09;路由选…

CAS详谈---无锁的锁机制

假设有多个线程想要操作同一个资源对象&#xff0c;我们首先想到的是使用互斥锁&#xff0c;但是互斥锁是悲观的。 悲观&#xff0c;即操作系统会悲观的认为如果不严格同步线程调用&#xff0c;那么一定会产生异常&#xff0c;所以互斥锁会将资源锁定&#xff0c;只供一个线程…

Django CORS配置方案

参考 https://pypi.org/project/django-cors-headers/ 在setting.py中设置 INSTALLED_APPS [......corsheaders, #添加此行 ]MIDDLEWARE[......corsheaders.middleware.CorsMiddleware, #添加此行django.middleware.common.CommonMiddleware,#django.middleware.csrf.CsrfVi…

【动手学深度学习】7.5 批量规范化(个人向笔记)

训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使它们收敛更加棘手。而本节的批量规范化&#xff08;batch normalization&#xff09; 可以持续加速深层网络的收敛速度结合下节会介绍道德残差块&#xff0c;批量规范化使得研究人员能够训练100层以上的网络 1.…

el-input设置placeholder字体大小

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、el-input设置placeholder字体大小&#xff1f; 一、el-input设置placeholder字体大小&#xff1f; .el-input__inner::placeholder {font-size: 12px;}

nbsaas vue3管理后台框架

nbsaas vue3管理后台框架 一、项目概述 Nbsaas Admin Vue 是一个基于 Vue.js 3.0 构建的轻量级后台管理系统&#xff0c;结合了现代前端技术栈的最佳实践&#xff0c;旨在帮助开发者快速构建具有高可扩展性和良好用户体验的后台管理系统。该项目拥有简洁的 UI 设计&#xff0…

Hikyuu教程 | 滚动回测与滚动寻优系统

前面介绍了如何使用 hikyuu 进行策略回测参数优化&#xff0c;同时也提到了这种简单的参数优化本质其实是对历史数据的过拟合&#xff0c;通常并不具备直接使用的意义。那么有什么办法来减缓这种过拟合影响&#xff0c;让参数优化发挥实际的作用呢&#xff1f;答案是——使用滚…

使用shell脚本自动重启服务

服务器后台运行的一些服务&#xff0c;有的时候由于高压操作导致服务崩溃时&#xff0c;总是得远程登录服务器&#xff0c;然后重启服务。 可以写shell脚本自动检测服务是否在运行&#xff0c;如果崩溃了就重启。 使用nohup在后台启动服务&#xff1a; nohup 服务启动命令所…

ifconfig 和 ip addr

1. 工具所属套件 ifconfig&#xff1a;属于较老的 net-tools 套件。曾是 Unix 和 Linux 系统上广泛使用的工具。ip addr&#xff1a;属于较新的 iproute2 套件。它取代了 ifconfig&#xff0c;并逐渐成为现代 Linux 系统上更常用的工具。 2. 功能覆盖范围 ifconfig&#xff…

Java之数组详解

一、数组的概念 数组&#xff08;Array&#xff09;是多个相同类型数据按一定顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c;通过编号&#xff08;索引&#xff09;的方式对这些数据进行统一管理。数组是程序设计中的一种基本数据结构&#xff0c;用于存储相同类型…

源码编译方式安装htppd软件

一.源码编译安装httpd软件 1.安装阿帕奇的依赖&#xff0c;安装apr软件&#xff0c;阿帕奇正常运行的环境这个环境就是apr。 2.安装apr-util软件&#xff0c;主要提供针对apr环境的管理工具&#xff0c; 3.安装阿帕奇软件即httpd软件。 如上图所示&#xff0c;就是三个软件的…

E38.【C语言】练习:数据结构时间复杂度的计算

目录 1.二分法的时间复杂度 解: 2.求阶乘的时间复杂度 解: 3.递归实现斐波那契数,求时间复杂度 解: 4.时间复杂度的排名 备注:有关时间复杂度的讲解参见80.【C语言】数据结构之时间复杂度 1.二分法的时间复杂度 (代码来自E7.【C语言】练习&#xff1a;在一个有序数组中…

RK3568笔记六十六:Live555推流

若该文为原创文章,转载请注明原文出处。 前面移植了live555,记录使用rk3568推流 一、流程 推流过程是在前面RTMP工程上修改的。RTMP推流是采集摄像头数据,AI推理,编码成H264通过FFMEPG推流,现在把FFMPEG改成使用Live555. 步骤: 1、使用opencv采集摄像头数据 2、初始化…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年&#xff0c;CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream&#xff0c;这是…