SpringBoot中整合ElasticSearch快速入门

news2025/1/12 18:08:41

文章目录

    • Elasticsearch 是什么
    • 使用
    • MySQL和ES对比
    • SpringBoot中整合ElasticSearch快速入门
      • Springboot中操作ES
      • 测试效果
      • 说明

Elasticsearch 是什么

Elasticsearch是一个基于 Apache Lucene 构建的分布式搜索和分析引擎,能够处理大规模数据并提供实时搜索和分析功能。它被广泛应用于日志和事件数据分析、全文搜索、业务分析和监控等领域。

使用

在虚拟机的 Docker 容器中安装ElasticsearchKibana。Kibana 是 Elasticsearch 的可视化工具,可以方便地对数据进行展示和分析。【安装教程网上挺多的】

MySQL和ES对比

MySQL 和 Elasticsearch 的对应概念进行对比,学东西多学会类比!!

MySQLElasticsearch说明
TableIndex索引(Index)是文档的集合,类似于数据库中的表(Table)。
RowDocument文档(Document)是数据记录,类似于数据库中的行(Row)。文档的格式为 JSON。
ColumnField字段(Field)是 JSON 文档中的属性,类似于数据库中的列(Column)。
SchemaMapping映射(Mapping)定义了索引中文档的结构和字段类型约束,类似于数据库中的表结构(Schema)。
SQLDSLDSL(Domain-Specific Language)是 Elasticsearch 提供的 JSON 风格的查询语言,用于操作 Elasticsearch,实现 CRUD 操作。

SpringBoot中整合ElasticSearch快速入门

访问Kibana
在这里插入图片描述

# 创建索引
PUT /articles

# 删除索引
DELETE /articles

# 新增一条数据(文档)  我指定了id
POST /articles/_doc/1
{
  "title": "运动",
  "content": "喜欢打篮球,乒乓球,羽毛球"
}

POST /articles/_doc/2
{
  "title": "户外",
  "content": "喜欢户外骑行,打篮球"
}

# 查全部
GET /articles/_search
{
  "query": {
    "match_all": {}
  }
}

# 根据指定字段查询
GET /articles/_search
{
  "query": {
    "match": {
      "id": 122
    }
  }
}

# 模糊查询
GET /articles/_search
{
  "query": {
    "match": {
      "content": "喜欢打篮球"
    }
  }
}

Springboot中操作ES

第一步:依赖

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

第二步:yml配置文件

spring:
  elasticsearch:
    rest:
      uris: "http://192.168.150.101:9200"

第三步:业务代码
@Document(indexName = “articles”):这个注解用于将 Article 类与 Elasticsearch 中的一个名为 articles 的索引进行关联。它告诉 Spring Data Elasticsearch 框架,这个类的对象将被映射到指定的索引中进行存储和操作。

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "articles")
@Data
public class Article {
    @Id
    private String id;
    private String title;
    private String content;
}

controller层

@RestController
@RequestMapping("/articles")
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    @PostMapping
    public Article createArticle(@RequestBody Article article) {
        return articleService.save(article);
    }

    @GetMapping("/{id}")
    public Optional<Article> getArticle(@PathVariable String id) {
        return articleService.findById(id);
    }

    @GetMapping
    public Iterable<Article> getAllArticles() {
        return articleService.findAll();
    }

    @DeleteMapping("/{id}")
    public void deleteArticle(@PathVariable String id) {
        articleService.deleteById(id);
    }

    @GetMapping("/search")
    public List<Article> searchArticles(@RequestParam String title) {
        return articleService.findByTitle(title);
    }
}

业务层

@Service
public class ArticleService {

    @Autowired
    private ArticleRepository articleRepository;

    public Article save(Article article) {
        return articleRepository.save(article);
    }

    public Optional<Article> findById(String id) {
        return articleRepository.findById(id);
    }

    public Iterable<Article> findAll() {
        return articleRepository.findAll();
    }

    public void deleteById(String id) {
        articleRepository.deleteById(id);
    }

    public List<Article> findByTitle(String title) {
        return articleRepository.findByTitle(title);
    }
}

持久层

//ElasticsearchRepository 是 Spring Data Elasticsearch 提供的一个接口,允许你在 Springboot 应用中方便地操作 Elasticsearch
public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
    List<Article> findByTitle(String title);
}

测试效果

在这里插入图片描述
在这里插入图片描述

说明

在 Spring Data Elasticsearch 中,通常使用 ElasticsearchRepository 接口来简化与 Elasticsearch 的交互。与原生 Elasticsearch 客户端相比,Spring Data Elasticsearch 提供了更高层次的抽象和便利,使得常见的操作(如查询、保存、删除等)可以通过简单的方法调用来完成


❤觉得有用的可以留个关注❤

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

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

相关文章

简单的docker学习 第8章 docker常用服务安装

第8章 常用服务安装 本章主要学习最常用的&#xff0c;也是安装起来稍有些麻烦的 MySQL 与 Redis 两种服务器的Docker 安装。至于其它服务器的 Docker 安装&#xff0c;大家可自行查找资料。只要 MySQL 与 Redis这两类服务器学会了安装&#xff0c;其它服务器的安装基本也不会…

C#编写多导联扫描式的波形图Demo

本代码调用ZedGraph绘图框架&#xff0c;自己先安装好ZedGraph环境&#xff0c;然后拖一个zedGraphControl控件就行了&#xff0c;直接黏贴下面代码 基本代码显示 using System; using System.Windows.Forms; using ZedGraph; using System.Timers;namespace ECGPlot {public…

Ubuntu24.04编译FFmpeg6.1(支持x264、x265、fdk-acc)

FFmpeg是一个开源的多媒体处理工具集&#xff0c;可以用于处理音频、视频和图片等多种媒体格式。由于其强大的功能和灵活性&#xff0c;FFmpeg被广泛应用在多媒体处理领域&#xff0c;包括音视频编解码、流媒体服务器、视频转码等。FFmpeg7.0 版本移除了 6.0 之前已弃用的 API&…

Java面试题--JVM大厂篇之Parallel GC与其他垃圾回收器的对比与选择

目录 引言: 正文: 结束语: 引言: Java工程师们&#xff0c;当我们在谈论JVM性能优化时&#xff0c;垃圾回收器&#xff08;GC&#xff09;无疑是一个绕不开的话题。而在所有的垃圾回收器中&#xff0c;Parallel GC无疑是一个备受关注的角色。今天&#xff0c;我们就来一探究…

浅谈wampserver安装配置的注意事项

目录 前言1. 基本知识2. 通过localhost或者ip地址访问根文件3. 更改服务器默认文件夹4. 彩蛋 前言 此处偏向思路讲解&#xff0c;详细的细节此处不提供&#xff08;安装过程忘记截图&#xff09; 主要以后期运维为主 详细安装配置过程推荐阅读&#xff1a;WampServer超级超级…

Java重修笔记 第二十九天 枚举类

枚举类 1. 定义&#xff1a;枚举属于一种特殊的类&#xff0c;里面只包含一组有限的特定的对象&#xff0c;枚举对象通常为只读&#xff0c;不能修改。枚举对象名通常为大写&#xff0c;静态不可修改。 2. 运用场景&#xff1a;需要特定对象的场景&#xff0c;例如四季只有春…

Java二十三种设计模式-桥接模式(10/23)

桥接模式&#xff1a;解耦抽象与实现的灵活设计 引言 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;用于将抽象部分与其实现部分分离&#xff0c;使它们可以独立地变化。它是一种对象结构型模式&#xff0c;又称为柄体(Handle and Body)模…

PCL1.11.0下载安装(Windows)

PCL1.11.0下载安装&#xff08;Windows&#xff09; PCL安装需要的几个模块如下图所示&#xff1a; 一、PCL1.11.0下载 PCL以1.11.0版本为例&#xff0c;打开下载连接&#xff08;PCL下载&#xff09; 下载PCL-1.11.0-AllInOne-msvc2019-win64.exe和pcl-1.11.0-pdb-msvc2019-…

Springboot指定扫描路径

方式一&#xff1a;通过在启动类的SpringbootApplication中指定包扫描或类扫描 指定需要扫描的包 scanBasePackages{"待扫描包1","待扫描包2", . . . ," "} 指定需要扫描的类 scanBasePackageClasses{类1.class,类2.class,...} 方式二&#xff…

Linux系统编程 --- 动静态库

一、回顾&#xff0c;制作一个库 libXXX.a --- 静态链接 libYYY.so --- 动态链接 设计一个库&#xff1a; 把我们提供的方法&#xff0c;给别人用&#xff1a; 1、把源文件直接给他 2、把我们的源代码打包成库 库 头文件。 原理&#xff1a;把所有的.o文件打包成.a文件也…

(免费领源码)python#Django#MYSQL医院预约挂号系统24802-计算机毕业设计项目选题推荐

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个基于django 医院预约挂号系统 &#xff0c;会使&#xff1b;医院预约挂号系统的管理工作系统化、规范化&#xff0c;也会提高平台形象&a…

宝塔企业版安装命令

使用方法 安装脚本: wget -O install.sh https://www.xpnal.cn/install/install_6.0.sh \&\& bash install.sh 更新脚本: curl https://www.xpnal.cn/install/update6.sh|bash 脚本说明: 没有安装过宝塔直接执行安装脚本&#xff0c;安装过执行更新脚本。 提醒 …

【Material-UI】多选模式(Multiple values)与Autocomplete的高级用法解析

文章目录 一、多选模式的基本用法二、高级用法1. 固定选项&#xff08;Fixed options&#xff09;2. 复选框&#xff08;Checkboxes&#xff09;3. 限制标签显示数量&#xff08;Limit tags&#xff09; 三、性能优化与最佳实践1. 筛选已选项&#xff08;filterSelectedOptions…

Scratch的下载与安装

如果你在某搜索引擎用这个&#xff0c;就是离被骗钱不远了 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 废话不多说&#xff0c;直接放软件安装包。重要的事情说三遍&#xff0c;收费的全是骗人的&#xff01;收费的全是骗人的&#xff01;收费的全是…

【C++题解】1015. 鸡兔同笼问题

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1015. 鸡兔同笼问题 类型&#xff1a;简单穷举 题目描述&#xff1a; 鸡兔同笼问题&#xff1a;一个笼子里面有鸡若干只&#xff0c;兔若干只。共有头 50 个&#xff0c;共有腿 16…

C语言的回调函数(详解qsort函数)

在上一篇文章中我们学习了指针与数组之间的关系&#xff0c;学习了指针数组&#xff0c;数组指针变量&#xff0c;函数指针变量和函数指针数组。那么接下来我们要学习的是一个利用函数指针变量去解决和简化各种问题的回调函数。 一、回调函数 回调函数在编程中是一种很常见的…

pip install -r requirements.txt下载某个.whl文件较慢的问题

访问PYPI官网。搜索该文件名字 如果不是自己要的版本&#xff0c;点击左边的Release history。 选择版本后再次在Download files页面下载.whl文件 下载完之后切换至自己的项目解释器虚拟环境。 python -m pip install 文件名.whl 如果你改名python.exe为python3.exe&#xff…

【消息队列】RabbitMQ 面试篇

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;消息队列 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. RabbitMQ 有哪些工作模式&#xff1f;2. 如何保证消息不丢失&#xff08;可靠性&#xff09;3. 什么是死信队列&#xff0c;如…

基于K210智能人脸识别+车牌识别系统(完整工程资料源码)

运行效果&#xff1a; 基于K210的智能人脸与车牌识别系统工程 目录&#xff1a; 运行效果&#xff1a; 目录&#xff1a; 前言&#xff1a; 一、国内外研究现状与发展趋势 二、相关技术基础 2.1 人脸识别技术 2.2 车牌识别技术 三、智能小区门禁系统设计 3.1 系统设计方案 3.2 …

【网络编程】网络原理(一)

系列文章目录 1、 初识网络 2、网络编程的基础使用&#xff08;一&#xff09; 文章目录 系列文章目录前言一、端口号的使用二、UDP报文学习1.报文格式2.MD5算法 总结 前言 在前文中&#xff0c;主要对UDP和TCP协议有了简单的了解&#xff0c;而这两种协议是负责传输层的内容…