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

SpringBoot 3.x整合Elasticsearch:从零搭建高性能搜索服务

告别数据库模糊查询的低效,基于SpringBoot 3.x + Elasticsearch 8.x构建毫秒级响应的搜索服务!

本文将手把手带你实现 SpringBoot 3.xElasticsearch 8.x 的深度整合,涵盖从环境搭建、数据索引到复杂查询、高亮显示的完整流程,助你轻松应对海量数据检索挑战。

文章目录

      • 一、为什么选择 Elasticsearch?
      • 二、环境准备
      • 三、核心依赖配置
      • 四、数据建模与索引映射
        • 1. 实体类注解
        • 2. 自定义索引设置
      • 五、核心操作实现
        • 1. 索引管理
        • 2. 数据CRUD
        • 3. 复杂查询(使用Java API Client)
      • 六、性能优化实战
        • 1. 批量写入提升10倍吞吐
        • 2. 查询调优技巧
      • 七、关键问题排查
      • 八、性能对比测试(1百万数据)
      • 结语


一、为什么选择 Elasticsearch?

  • 近实时搜索:数据变更后秒级可见
  • 分布式高性能:轻松处理PB级数据
  • 相关性评分:智能排序搜索结果
  • 丰富查询语法:支持全文、模糊、地理空间等查询

二、环境准备

  1. Elasticsearch 8.x

    docker run -d --name es8 -p 9200:9200 -p 9300:9300 \
    -e "discovery.type=single-node" \
    -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
    docker.elastic.co/elasticsearch/elasticsearch:8.11.1
    
  2. SpringBoot 3.1+ (JDK 17+)

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.5</version>
    </parent>
    

三、核心依赖配置

<dependencies><!-- Spring Data Elasticsearch --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- 官方Java Client --><dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.11.1</version></dependency>
</dependencies>

配置application.yml

spring:elasticsearch:uris: https://localhost:9200 # 注意8.x默认开启SSLusername: elasticpassword: your_password # 启动时生成的密码

四、数据建模与索引映射

1. 实体类注解
@Document
http://www.lryc.cn/news/612015.html

相关文章:

  • Post-train 入门(1):SFT / DPO / Online RL 概念理解和分类
  • 未给任务“Fody.WeavingTask”的必需参数“IntermediateDir”赋值。 WpfTreeView
  • 嵌入式开发学习———Linux环境下IO进程线程学习(五)
  • 【PZSDR P201MINI】 P201Mini 软件无线电开发板:紧凑型射频系统的性能标杆
  • Debian系统更新实现
  • 在 Neo4j实现虚拟关系(间接)的可视化
  • (Python)待办事项升级网页版(html)(Python项目)
  • 识别 Base64 编码的 JSON、凭证和私钥
  • IntelliJ IDEA 2025.1.4.1 中文版
  • 防火墙(firewalld)
  • 医疗AI中GPU部署的“非对等全节点架构“方案分析(中)
  • 队列很多时,为什么RocketMQ比Kafka性能好?
  • Linux seLinux
  • 【通俗易懂】详解AI大模型微调中的常见超参数的作用
  • 工控机 vs 服务器:核心区别与应用场景深度解析
  • K8S云原生监控方案Prometheus+grafana
  • 基于MATLAB实现的具有螺旋相位板的4F系统用于图像边缘增强的仿真
  • [科普] 从单核到千核:Linux SMP 的“演化史”与工程细节
  • 学习 Android (十六) 学习 OpenCV (一)
  • 【React 插件】@uiw/react-md-editor 使用教程:从基础使用到自定义扩展
  • 人工智能大数据模型驱动企业创新
  • AttributeError: ‘WSGIRequest‘ object has no attribute ‘data‘
  • LibTorch C++ 部署深度学习模型:GPU 调用配置详解
  • 关于C语言连续强制类型转换,有符号数据位移,以及温度传感器int16有符号数据重组处理问题
  • 数论手机辅助:打造便捷高效的移动应用交互体验
  • 房产开发证书识别-建筑工程施工许可证识别-竣工验收备案表识别-土地规划许可证识别-商品房预售许可证识别-建筑工程施工许可证识别等房产企业证书识别场景剖析
  • 【数据分享】西藏土壤类型数据库
  • 生成模型实战 | GPT-2(Generative Pretrained Transformer 2)详解与实现
  • 【Linux内核系列】:信号(上)
  • 力扣热题100------136.只出现一次的数字