讲师中心 微信公众号
AI工具推荐 视频效率加速

SpringBoot 4.7 Starter Elasticsearch搜索引擎集成【全文检索】

轻萱大大_3005

轻萱大大_3005

发布时间:2026-08-07 14:56:39

|

293人浏览过

|

来源于php中文网

原创

必须使用 Spring Data Elasticsearch 5.3.2 与 Elasticsearch 8.15.0/8.15.1 组合,配置 TLS+API key 认证,定义 IK 分词器的 @Document 实体,通过 SearchHits 获取高亮结果,启动时自动创建索引并验证中文全文检索。

springboot 4.7 starter elasticsearch搜索引擎集成【全文检索】

要在 SpringBoot 4.7 中完成 Elasticsearch 搜索引擎集成并实现可运行的全文检索功能,必须严格匹配 Spring Data Elasticsearch 5.3+ 与 Elasticsearch 8.15+ 的版本组合,否则启动时会因客户端协议变更直接抛出 java.lang.NoClassDefFoundError: co/elastic/clients/elasticsearch/_types/analysis/CustomAnalyzer 类缺失异常。

确认版本兼容性

SpringBoot 4.7 不再支持旧版 Transport Client 或 RestHighLevelClient,仅兼容基于 Elasticsearch Java API Client(v8.15+)的 Spring Data Elasticsearch 5.3.x。打开 pom.xml,检查以下依赖是否精确匹配:

【必须使用 spring-data-elasticsearch 5.3.2,不可用 5.2.x 或 5.4.x】

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

同时确保本地 Elasticsearch 实例为 8.15.0 或 8.15.1 —— 8.16.0 已移除 _search?typed_keys 兼容入口,会导致 ElasticsearchException: [illegal_argument_exception] unknown parameter [typed_keys] 报错。

配置 Elasticsearch 连接

application.yml 中启用 TLS 认证和 API key 认证双模式(Elasticsearch 8.15 默认强制启用安全模块):

spring:
  elasticsearch:
    uris: https://localhost:9200
    username: elastic
    password: ${ES_PASSWORD:changeme}
    client:
      reactive: false
      rest:
        connection-timeout: 5000
        read-timeout: 15000

注意:若跳过证书校验(仅限开发),需额外添加 JVM 参数:-Djavax.net.ssl.trustStore=/dev/null -Djavax.net.ssl.trustStorePassword=changeit,否则会卡在 SSLHandshakeException

定义文档实体与分词策略

方法一:使用 @Document 声明索引并绑定 IK 分词器(需提前在 ES 8.15 中安装 ik 插件 v8.15.0)

@Document(indexName = "articles")
public class Article {
  @Id
  private String id;
  @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
  private String title;
  @Field(type = FieldType.Text, analyzer = "ik_max_word")
  private String content;
  @Field(type = FieldType.Keyword)
  private String author;
}

方法二:若不依赖 IK,改用内置 standard 分词器,但中文检索效果将严重劣化——例如搜索“人工智能”无法命中含“AI”或“智能”的文档。

编写 Repository 接口与高亮查询

第一步:继承 ElasticsearchRepository 并声明自定义方法

public interface ArticleRepository extends ElasticsearchRepository<Article, String> {
  List<Article> findByTitleContaining(String keyword);
  @Query("{\"query\":{\"match\":{\"title\":{\"query\":\"?0\",\"analyzer\":\"ik_smart\"}}},\"highlight\":{\"fields\":{\"title\":{}}}}")
  SearchHits<Article> searchWithHighlight(String keyword);
}

第二步:在 Service 层调用高亮结果解析

SearchHits<Article> hits = articleRepository.searchWithHighlight("机器学习");
for (SearchHit<Article> hit : hits) {
  Map<String, List<String>> highlight = hit.getHighlightFields();
  if (highlight.containsKey("title")) {
    String highlighted = highlight.get("title").get(0); // 取第一个高亮片段
    System.out.println(highlighted);
  }
}

这一步必须用 SearchHits 而非 List,否则高亮字段不会被注入到返回对象中。

启动应用并验证索引自动创建

1. 启动 SpringBoot 应用,观察控制台日志:
✅ 出现 Created index 'articles' with settings {...} 表示映射成功
❌ 若报错 index_not_found_exception,说明 @Document 中的 indexName 值未被识别,检查类是否被 ComponentScan 扫描到

2. 向 http://localhost:9200/articles/_doc POST 一条测试数据(Content-Type: application/json):
{ "id": "1", "title": "SpringBoot 集成 Elasticsearch 全文检索实战", "content": "本文详解 SpringBoot 4.7 如何对接 Elasticsearch 8.15 实现毫秒级中文搜索", "author": "dev" }

3. 发起 GET 请求:http://localhost:8080/api/search?q=全文检索,响应体中应包含 "highlight":{"title":["SpringBoot 集成 Elasticsearch <em>全文检索</em>实战"]}

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2131

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

397

2026.01.26

什么是搜索引擎
什么是搜索引擎

搜索引擎是一种互联网工具,用于帮助用户在网上查找信息。搜索引擎的目标是提供最准确、最有价值的搜索结果,使用户能够快速找到所需的信息。本专题为大家提供搜索引擎相关的各种文章、以及下载和课程。

2753

2023.08.02

有哪些目录搜索引擎
有哪些目录搜索引擎

目录搜索引擎有Google、Bing、Yahoo、Baidu、DuckDuckGo等。想了解更多目录搜索引擎的相关内容,可以阅读本专题下面的文章。

25908

2023.11.06

搜索引擎营销的主要模式
搜索引擎营销的主要模式

搜索引擎营销的主要模式包括:1. 竞价排名(ppc);2. 搜索引擎优化(seo);3. 本地搜索营销;4. 购物广告;5. 视频广告;6. 展示广告;7. 社交媒体营销;8. 移动广告。想了解更多搜索引擎营销的相关内容,可以阅读本专题下面的文章。

2489

2024.05.20

Elasticsearch 从入门到搜索引擎实战
Elasticsearch 从入门到搜索引擎实战

本专题带你从零掌握 Elasticsearch 分布式搜索引擎。深入解析倒排索引核心原理,涵盖单机与 Docker 环境搭建、IK 中文分词器配置及索引文档的 CRUD 操作。通过丰富的 Query DSL 实战案例,详解布尔查询、聚合分析与高亮显示,助你快速构建毫秒级响应的企业级高性能搜索服务。

39

2026.05.12

Elasticsearch 高级查询与性能优化
Elasticsearch 高级查询与性能优化

本专题深入解析 Elasticsearch 高级查询与性能优化实战。详解 Bool 复合查询、复杂过滤及聚合分析技巧,解决多条件精准检索难题。从索引设计、JVM 调优到硬件规划,全方位分享 Filter 缓存、深分页优化及集群架构调优策略,助你突破性能瓶颈,打造毫秒级响应的高并发企业级搜索服务。

64

2026.05.12

Elasticsearch 企业级开发与运维实践专题
Elasticsearch 企业级开发与运维实践专题

本专题聚焦 Elasticsearch 企业级开发与运维实战。深入解析生产环境集群架构规划、节点角色分离及冷热数据分层策略。涵盖索引生命周期管理(ILM)、安全权限控制、快照备份及全链路监控告警体系搭建。通过分享高可用部署与故障排查经验,助你构建安全、稳定且可扩展的企业级分布式搜索平台。

41

2026.05.12

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

20

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn