[Java实战]Spring Boot整合Elasticsearch(二十六)

[Java实战]Spring Boot整合Elasticsearch(二十六)

摘要:本文通过完整的实战演示,详细讲解如何在Spring Boot项目中整合Elasticsearch,实现数据的存储、检索和复杂查询功能。包含版本适配方案、Spring Data Elasticsearch高级特性以及性能优化建议。

一、Elasticsearch核心概念与优势

1.1 为什么要选择Elasticsearch?

  • 近实时搜索:数据变更后1秒内即可被检索
  • 分布式架构:天然支持水平扩展,轻松应对海量数据
  • 全文检索能力:基于倒排索引,支持模糊查询、同义词、分词等
  • 多数据类型:支持结构化、非结构化和地理空间数据

1.2 核心概念解析

概念类比关系型数据库说明
IndexDatabase数据容器,包含多个文档类型
TypeTable7.x版本后已废弃
DocumentRow数据的基本单元
FieldColumn文档的字段
Shard分区索引的横向拆分单元

二、环境准备与版本适配

2.1 组件版本选择

  • Spring Boot 2.7.x
  • Elasticsearch 7.10.x
  • Spring Data Elasticsearch 4.4.x
<!-- pom.xml 依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.2 配置Elasticsearch连接

# application.yml
spring:elasticsearch:uris: http://localhost:9200username: elasticpassword: your_password

三、实现数据存储与检索

3.1 定义领域模型

@Document(indexName = "articles")
public class Article {@Idprivate String id;@Field(type = FieldType.Text)private String title;@Field(type = FieldType.Keyword)private String category;@Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second)private LocalDateTime createTime;
}

3.2 创建Repository接口

public interface ArticleRepository extends ElasticsearchRepository<Article, String> {// 自定义查询方法List<Article> findByTitleContaining(String keyword);@Query("{\"match\": {\"title\": {\"query\": \"?0\"}}}")Page<Article> searchByTitle(String keyword, Pageable pageable);
}

3.3 基础CRUD操作示例

@Service
@RequiredArgsConstructor
public class ArticleService {@Autowiredprivate   ArticleRepository repository;public void  save(Article article) {repository.save(article);}public Page<Article> search(String keyword, int page, int size) {return (Page<Article>) repository.searchByTitle(keyword,PageRequest.of(page, size, Sort.by("createTime").descending()));}

3.4 controller编写

@RestController
@RequestMapping("/art")
public class ArticleController {@Autowiredprivate  ArticleService articleService;//保存数据@PostMapping("/saveArt")public void saveArtInfo(@RequestBody Article art){Article article = new Article();article.setTitle("Spring Boot整合Elasticsearch实战");article.setCategory("技术文章");article.setCreateTime(LocalDateTime.now());System.out.println("=======保存数据======");articleService.save(article);// 查询所有文档//articleService.findAllArticles();}
}

3.5 接口测试

#post请求
http://localhost:8080/art/saveArt

在这里插入图片描述

ES中查看数据:

curl -X GET "localhost:9200/articles/_search?pretty"

在这里插入图片描述

四、高级查询实战

4.1 组合查询(Bool Query)

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("title", "Spring")).filter(QueryBuilders.rangeQuery("createTime").gte("now-7d/d"));queryBuilder.withQuery(boolQuery);
SearchHits<Article> hits = elasticsearchOperations.search(queryBuilder.build(), Article.class);

4.2 聚合分析示例

TermsAggregationBuilder categoryAgg = AggregationBuilders.terms("category_count").field("category.keyword").size(10);NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(categoryAgg).build();SearchHits<Article> searchHits = elasticsearchOperations.search(searchQuery, Article.class);
Terms terms = searchHits.getAggregations().get("category_count");

五、性能优化建议

  1. 索引策略优化

    • 合理设置分片数(建议每个分片大小在10-50GB)
    • 使用别名实现零停机索引切换
  2. 查询优化技巧

    • 避免深度分页(推荐使用search_after)
    • 使用filter上下文缓存高频过滤条件
  3. 硬件配置推荐

    • SSD硬盘优先
    • JVM堆内存不超过32GB
    • 预留50%内存给文件系统缓存

六、常见问题排查

Q1:出现NoNodeAvailableException异常

  • 检查ES集群状态:GET _cluster/health
  • 验证网络连接和防火墙设置

Q2:查询结果不符合预期

  • 使用Analyze API验证分词效果:
    POST _analyze
    {"analyzer": "ik_max_word","text": "分布式搜索引擎"
    }
    

参考文献

  1. Elasticsearch官方文档
  2. Spring Data Elasticsearch官方指南

如果你在使用过程中遇到任何问题,欢迎在评论区留言交流。感谢你的阅读,希望这篇文章对你有所帮助!

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

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

相关文章

【关联git本地仓库,上传项目到github】

目录 1.下载git2.绑定用户3.git本地与远程仓库交互4.github项目创建5.上传本地项目到github6.完结撒花❀❀❀&#xff01;&#xff01;&#xff01; 1.下载git git下载地址&#xff1a;https://git-scm.com/downloads 下载安装后创建快捷地址&#xff1a;&#xff08;此处比较…

[Vue]路由基础使用和路径传参

实际项目中不可能就一个页面&#xff0c;会有很多个页面。在Vue里面&#xff0c;页面与页面之间的跳转和传参会使用我们的路由: vue-router 基础使用 要使用我们需要先给我们的项目添加依赖:vue-router。使用命令下载: npm install vue-router 使用路由会涉及到下面几个对象:…

软考-软件工程开发模型

软考-软件工程开发模型 参考视频&#xff1a; 软件工程概述&开发模型 &#xff0c;配合视频理解更清晰&#xff5e; 软件的生命周期为&#xff1a;需求分析、软件设计、软件开发、运行维护直至被淘汰 几个阶段。 软件工程支持 4 个活动&#xff0c;简称 PDCA&#xff0c…

【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化

目录 前言 一、空间检索简介 1、空间表结构 2、四至空间检索 二、前后端实现 1、后端实现 2、前端集成 三、成果展示 1、东部省份 2、西部省份 3、南部省份 4、北部省份 5、中部省份 四、总结 前言 在当今数字化时代&#xff0c;地理信息数据的分析与可视化对于众…

智能守护校园“舌尖安全“:AI视频分析赋能名厨亮灶新时代

引言&#xff1a; 在校园食品安全备受关注的今天&#xff0c;一套融合视频监控管理平台与AI视频分析盒子的智能解决方案正在全国多地学校食堂悄然落地&#xff0c;为传统的"名厨亮灶"工程注入科技新动能。这套系统不仅实现了后厨操作的"透明化"&#xff0…

【软件设计师】计算机网络考点整理

以下是软件设计师考试中 ​​计算机网络​​ 的核心考点总结&#xff0c;帮助您高效备考&#xff1a; ​​一、网络体系结构与协议​​ ​​OSI七层模型 & TCP/IP四层模型​​ 各层功能&#xff08;物理层-数据链路层-网络层-传输层-会话层-表示层-应用层&#xff09;对应协…

Starrocks的CBO基石--统计信息的来源 StatisticAutoCollector

背景 本文来从底层代码的实现来分析一下Starrocks怎么获取统计信息&#xff0c;这些统计信息在后续基于CBO的代价计算的时候有着重要的作用 本文基于Starrrocks 3.3.5 结论 Starrocks的统计信息的收集是通过周期性的运行一系列的SQL&#xff08;以分区为维度&#xff0c;如果…

深度学习模型部署(四)——RKNN

一、RKNN部署及工具包安装 参考1&#xff1a;https://blog.csdn.net/qq_40280673/article/details/136211086#/ 参考2&#xff1a;瑞芯微官方教程 RKNN部署针对瑞芯微芯片优化&#xff0c;支持NPU硬件加速&#xff0c;需要安装rknn-toolkit&#xff0c;用于将pytorch模型转换为…

重构研发效能:项目管理引领软件工厂迈向智能化

1.项目管理智能化&#xff0c;激活软件工厂新引擎 在高速发展的软件开发时代&#xff0c;企业如何高效管理多个项目、协调团队合作、优化资源配置&#xff0c;已成为推动技术进步的关键。尤其是在多任务、多项目并行的复杂环境下&#xff0c;智能项目组合管理工具正成为软件工…

小米汽车二期工厂下月将竣工,产能提升助力市场拓展

在新能源汽车市场竞争日益激烈的当下&#xff0c;小米汽车传来重要进展消息。据多方信息显示&#xff0c;小米汽车二期工厂下月即将竣工&#xff0c;这一关键节点的到来&#xff0c;有望为小米汽车的产能提升与市场布局带来重大突破。​ 小米汽车二期工厂位于北京亦庄&#xff…

Python 爬虫实战:电竞比赛直播数据实时抓取与可视化分析

一、引言 在电竞行业快速发展的今天,电竞比赛直播数据成为了电竞爱好者、分析师和商业机构关注的焦点。实时抓取电竞比赛直播数据并进行分析,不仅可以帮助观众更好地理解比赛,还能为战队战术优化、选手表现评估以及赛事运营提供重要参考。 本文将详细介绍如何使用Python爬…

零基础设计模式——创建型模式 - 生成器模式

第二部分&#xff1a;创建型模式 - 生成器模式 (Builder Pattern) 前面我们学习了单例、工厂方法和抽象工厂模式&#xff0c;它们都关注如何创建对象。生成器模式&#xff08;也常被称为建造者模式&#xff09;是另一种创建型模式&#xff0c;它专注于将一个复杂对象的构建过程…

Debezium快照事件监听器系统设计

Debezium快照事件监听器系统设计 1. 系统概述 1.1 设计目标 为 Debezium 的快照过程提供可扩展的事件监听机制允许外部系统在快照过程中执行自定义逻辑提供线程安全的事件分发机制确保监听器的异常不会影响主快照流程1.2 核心功能 表快照开始事件监听表快照完成事件监听行数据…

手术机器人行业新趋势:Kinova多机械臂协同系统如何突破复杂场景适应性瓶颈?

机器人手术历经多阶段技术演进&#xff0c;已成为现代医疗重要方向。其需求增长源于医疗机构对高精度低风险手术方案的需求、微创手术普及及技术进步带来的复杂场景适应性提升。Kinova 轻型机械臂凭借模块化设计与即插即用功能&#xff0c;可快速适配不同手术环境&#xff0c;为…

力扣面试150题-- 二叉树展开为链表

Day 46 题目描述 思路 初次做法&#xff1a;由于我直接考虑O&#xff08;1&#xff09;级别的空间复杂度&#xff0c;于是采取了以下做法&#xff1a; 接下来的内容就是递归函数如果该节点为空&#xff0c;就返回null将此时的current作为头节点&#xff0c;left和right作为孩…

【Python】开发工具uv

文章目录 1. uv install1.1 下载安装脚本来安装1.2 使用pipx安装uv1.3 补充 2. 考虑在离线系统上安装uv2.1 下载并上传安装包2.2 用户级安装uv&#xff08;~/.local/bin/&#xff09;2.3 补充 3. uv 管理Python解释器4. uv 管理依赖5. uv运行代码5.1 uv不在项目下执行脚本5.2 u…

zabbix批量主机维护脚本兼容性更新

最近做新老版本zabbix监控主机迁移发现zabbix6.0后api安全有了效大升级&#xff0c;批量主机维护脚本出现认证兼容性问题&#xff0c;以下为脚本更新token支持&#xff1a;在这里插入代码片&#xff1a; # /usr/bin/env python3 # -*- coding:utf-8 -*- import requests impor…

Java中static关键字深度解析:从入门到高阶实战

Java中static关键字深度解析&#xff1a;从入门到高阶实战 目录 static的本质与核心特性静态变量 vs 实例变量&#xff1a;底层对比静态方法的设计哲学与应用场景高级用法&#xff1a;突破常规的static技巧 4.1 静态代码块&#xff1a;类加载的“初始化引擎”4.2 静态内部类&…

基于RT-Thread的STM32F4开发第五讲——软件模拟I2C

文章目录 前言一、RT-Thread工程创建二、AT24C02三、函数编写1.I2C_soft.c2.I2C_soft.h3.main.h 四、效果展示五、资源分享总结 前言 本章是基于RT-Thread studio实现软件模拟I2C&#xff0c;开发板是正点原子的STM32F4探索者&#xff0c;使用的RT-Thread驱动是5.1.0&#xff0…

49、c# 能⽤foreach 遍历访问的对象需满足什么条件?

在 C# 中&#xff0c;要使用 foreach 循环遍历一个对象&#xff0c;该对象必须满足以下条件之一&#xff1a; 1. 实现 IEnumerable 或 IEnumerable 接口 非泛型版本&#xff1a;System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…