Spring Boot 集成 Elasticsearch入门教学

news2024/10/11 21:20:34

一、什么是 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  // 表示文档的唯一ID
    private 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 {

    @Autowired
    private 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 {

    @Autowired
    private BlogService blogService;

    @PostMapping
    public 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.coloradmin.cn/o/2205880.html

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

相关文章

Python和MATLAB及C++和Fortran胶体粒子数学材料学显微镜学微观流变学及光学计算

&#x1f3af;要点 二维成像拥挤胶体粒子检测算法粒子的局部结构和动力学分析椭圆粒子成链动态过程定量分析算法小颗粒的光散射和吸收活跃物质模拟群体行为提取粒子轨迹粘弹性&#xff0c;计算剪切模量计算悬浮液球形粒子多体流体动力学概率规划全息图跟踪和表征粒子位置、大小…

创建docker虚拟镜像,创建启动服务脚本

进入系统命令服务目录 编辑服务 [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/…

Gradle 插件获取所有依赖项,类似 androidDependencies?

诉求 在打包过程中我想知道某个模块的信息&#xff0c;比如&#xff1a; 模块androidx.work:work-runtime是否被依赖&#xff1f;模块androidx.work:work-runtime的版本号是多少&#xff1f; 我们利用 Android studio 已有的任务androidDependencies&#xff0c;双击执行很容…

PyQt5写好的py文件生成可执行的exe文件【Nuitka】

文章目录 1.Nuitka引入2.Nuitka与Pyinstaller对比Nuitka安装 3.Nuitka指令4.参数以及作用5.多文件格式封装完成后可删除文件6.运行问题问题1问题2 1.Nuitka引入 看过我上一篇PyQt5写好的py文件生成可执行的exe文件【Pyinstaller】的应该了解到用PyQt5写的界面程序可以通过Pyins…

安卓冻屏bug案例作业分享-千里马学员wms+input实战作业

背景&#xff1a; 近期有学员反馈在aosp14高版本上有了一个新窗口TaskBar&#xff0c;这个但是有需求就是对这个TaskBar进行隐藏&#xff0c;所以有一个需要对这个TaskBar进行进行隐藏需求 隐藏TaskBar需求做了之后发现有如下bug&#xff1a; 问题复现步骤&#xff1a; 因…

新款示波器RTE1104罗德与施瓦茨RS RTE1102原装二手

罗德与施瓦茨R&S RTE1104触摸屏RTE1102新款示波器 R&S-RTE1000 示波器系列&#xff1a; RTE1022标配&#xff1a;200MHz带宽&#xff0c;2通道&#xff0c;5GSa/s采样率&#xff0c;200M存储深度&#xff0c;16个数字通道&#xff08;选配&#xff09; RTE1032标配&a…

HCIP--以太网交换安全(二)端口安全

端口安全 一、端口安全概述 1.1、端口安全概述&#xff1a;端口安全是一种网络设备防护措施&#xff0c;通过将接口学习的MAC地址设为安全地址防止非法用户通信。 1.2、端口安全原理&#xff1a; 类型 定义 特点 安全动态MAC地址 使能端口而未是能Stichy MAC功能是转换的…

解决PyCharm 2023 Python Packages列表为空

原因是因为没有设置镜像源 展开 > 之后&#xff0c;这里 点击齿轮 添加一个阿里云的源 最后还需要点击刷新 可以选择下面的任意一个国内镜像源&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://mirrors.aliyun.com/…

asp.net core Partial 分部视图、视图组件(core mvc 才支持)、视图、Razor组件 、razor pages

分部视图 》》》传参 》》两个东西换个名称&#xff0c;PartialView()>渲染视图>不带Layout 部分视图与普通视图没太大区别&#xff0c;它可以将重复使用的HTML内容结合起来&#xff0c;可以单独使用。 一般命名是在名称前面加下划线&#xff0c;放在/Views/Shared 目…

【cocos creator】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入&#xff0c;滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…

基于Web的停车场管理系统(论文+源码)_kaic

摘要 我国经济的发展愈发迅速&#xff0c;车辆也随之增加的难以想象&#xff0c;因此车位的治理也越来越繁杂&#xff0c;为了方便停车位相关信息的管理&#xff0c;设计开发一个合理的停车位管理系统尤为重要。因而&#xff0c;具有信息方便读取和操作简便的停车位管理系统的设…

Java基础-知识点

文章目录 数据类型包装类型缓存池 String概述不可变的含义不可变的好处String、StringBuffer、StringBuilderString.intern() 运算参数传递float与double隐式类型转换switch 继承访问权限抽象类与接口super重写与重载**1. 重写(Override)****2. 重载(Overload)** Object类的通用…

H3C GRE over IPsec VPN 实验

H3C GRE over IPsec VPN 实验 实验拓扑 ​​ 实验需求 某企业北京总部、上海分支、武汉分支分别通过 R1,R3,R4 接入互联网,配置默认路由连通公网按照图示配置 IP 地址,R1,R3,R4 分别配置 Loopback0 口匹配感兴趣流,Loopback1 口模拟业务网段北京总部拥有固定公网地址…

VMware Fusion 13.6.1 发布下载,修复 4 个已知问题

VMware Fusion 13.6.1 发布下载&#xff0c;修复 4 个已知问题 VMware Fusion 13.6.1 for Mac - 领先的免费桌面虚拟化软件 适用于基于 Intel 处理器和搭载 Apple 芯片的 Mac 的桌面虚拟化软件 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-fusion-13/ 查看最新…

找不到xinput1_3.dll怎么解决,快来试试这个几个方法

在计算机系统运行过程中&#xff0c;当我们遭遇“找不到xinput1_3.dll”这一错误提示时&#xff0c;实际上正面临一个软件兼容性、系统组件缺失以及游戏或应用程序无法正常启动的关键问题。深入探究这一现象&#xff0c;我们会发现它可能引发一系列连带问题&#xff0c;例如某些…

【课程设计/毕业设计】Java家政预约管理系统源码+开发文档

项目介绍 一直想做一款家政管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以咨询留言。 在线体验 http://jiazheng.gitapp.cn/ 源码地址 https://github.com/geeeeeeeek/java_jiazh…

JVM和GC案例详解

接上文JVM环境配置说明&#xff1a;上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控)&#xff0c;设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat&#xff0…

python可变数据类型和不可变数据类型

先看一段代码。 value1 10 value2 value1 print(value1) print(value2) value1 30 print(value1) print(value2)再看另一段代码。 list1 [1,2,3,4] list2 list1 print(list1) print(list2) list1.append(5) print(list1) print(list2)第一段代码中&#xff0c;value2的值…

深入解析:如何使用LangChain进行RAG处理半结构化数据

深入解析&#xff1a;如何使用LangChain进行RAG处理半结构化数据 引言 在处理半结构化数据如PDF文件时&#xff0c;如何有效提取信息是一个挑战。本文将介绍如何使用LangChain的RAG处理模板处理这样的数据。我们将探讨安装、使用和在项目中集成的完整过程。 主要内容 环境设…

FLBOOK一款强大的电子产品图册制作工具

随着科技的飞速发展&#xff0c;电子产品已经成为我们生活中不可或缺的一部分。为了让消费者更好地了解产品特性、功能及优势&#xff0c;电子产品图册的制作显得尤为重要。今天&#xff0c;我要向大家介绍一款强大的电子产品图册制作工具——FLBOOK。 一、FLBOOK简介 FLBOOK是…