必须完成elasticsearch与spring boot的正确集成以启用全文搜索等功能,涵盖版本兼容性确认、docker部署es服务、添加maven依赖、配置application.yml、定义实体类、创建repository接口及实现高亮搜索。

如果您希望在 Spring Boot 应用中快速启用全文搜索、日志分析或商品检索能力,则必须完成 Elasticsearch 与 Spring Boot 的正确集成。以下是覆盖环境准备、依赖配置、连接设置、实体映射及核心操作的完整流程:
一、确认版本兼容性
Spring Data Elasticsearch 与 Elasticsearch 服务端版本必须严格匹配,否则项目启动失败或功能异常。Spring Boot 3.x 默认使用 Spring Data Elasticsearch 5.x,仅兼容 Elasticsearch 8.x;若使用 Spring Boot 2.7.x,则需搭配 Spring Data Elasticsearch 4.x 与 Elasticsearch 7.x。
1、检查当前 Spring Boot 版本:查看 pom.xml 中 spring-boot-starter-parent 的 version 属性值。
2、根据 Spring Boot 版本反查官方兼容矩阵:访问 https://spring.io/projects/spring-data-elasticsearch#learn 获取对应 Spring Data Elasticsearch 版本号。
3、确认 Elasticsearch 服务端版本:执行 curl http://localhost:9200 查看返回 JSON 中的 version.number 字段。
二、启动并配置 Elasticsearch 服务
推荐使用 Docker 快速部署单节点开发环境,避免本地 Java 环境冲突与配置复杂性。关闭安全认证可简化初始集成步骤。
1、创建挂载目录:mkdir -p /opt/es8/{data,plugins} && chmod 777 /opt/es8/data /opt/es8/plugins。
2、运行容器:docker run -d --name es8 -p 9200:9200 -p 9300:9300 -e discovery.type=single-node -e xpack.security.enabled=false -v /opt/es8/data:/usr/share/elasticsearch/data -v /opt/es8/plugins:/usr/share/elasticsearch/plugins elasticsearch:8.15.2。
3、验证服务可用:curl -X GET "http://localhost:9200/_cat/health?v",返回 green 状态即表示集群健康。
三、添加 Maven 依赖
引入 Spring Data Elasticsearch 启动器,它封装了底层 REST 客户端,提供 Repository 编程模型,适用于大多数 CRUD 与简单查询场景。
1、在 pom.xml 的
2、如需中文分词支持,同步添加 Lombok(简化实体类):
四、配置 application.yml 连接参数
Spring Boot 3.x 使用统一的 spring.elasticsearch.* 命名空间,不再区分 rest 或 client 子路径。若 Elasticsearch 启用了安全认证,必须填写用户名与密码。
1、在 application.yml 中写入以下内容:spring: elasticsearch: uris: http://localhost:9200。
2、若已启用安全认证(如默认 elastic 用户),追加:username: elastic password: changeme。
3、确保未残留旧版配置项(如 spring.elasticsearch.rest.uris),否则将导致 Bean 创建失败。
五、定义 Elasticsearch 实体类
实体类通过注解声明索引结构与字段行为,@Document 控制索引级元数据,@Field 控制字段类型与分词策略,是映射正确性的关键。
1、添加 @Document(indexName = "article") 在类声明上方,指定索引名称。
2、为主键字段添加 @Id 注解,无需额外配置生成策略。
3、对需全文检索的字段(如 title、content),使用 @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart");对精确匹配字段(如 status、category),使用 @Field(type = FieldType.Keyword)。
六、创建 Repository 接口
继承 ElasticsearchRepository 可自动获得 save、findById、findAll、deleteById 等基础方法,并支持按方法名派生查询(如 findByTitleContaining)。
1、定义接口并继承泛型参数:public interface ArticleRepository extends ElasticsearchRepository。
2、添加自定义查询方法:List
3、在实现类或 Service 中注入该接口实例,即可直接调用方法,无需手动编写 DSL。
七、实现高亮搜索功能
高亮显示能显著提升用户体验,需在查询构造中显式启用高亮选项,并在结果中提取 HighlightField 内容,而非直接返回原始字段值。
1、在 Service 方法中构建 NativeSearchQueryBuilder,调用 withHighlightFields() 并指定字段名与预设标签。
2、执行查询后,遍历 SearchHits,对每条结果调用 getHighlightFields().get("title") 获取高亮片段列表。
3、将高亮文本替换原始字段内容,返回前端时保留 标签以支持 CSS 渲染。










