SpringBoot 从入门到光头 —— 第十三章 SpringBoot 与检索
1. 检索
我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的首选。它可以快速的存储、搜索和分析海量数据。SpringBoot 通过整合 SpringDataElasticSearch 为我们提供了非常便捷的检索功能支持。
ElasticSearch 是一个分布式搜索服务,提供 Restful APl, 底层基于 Lucene, 采用多 Shard(分片)的方式保证数据安全,并目提供自动 Resharding 的功能,Github 等大型的站点也是采用了 ElasticSearch 作为其搜索服务.
2. 概念
- 以 员工文档 的形式储存为例:一个 文档 代表一个员工数据。存储数据到 ElasticSearch 的行为叫做 索引 ,但在索引一个文档前,需要确定将文档存储在哪里。
- 一个 ElasticSearch 集群可以包含多个 索引 ,相应的,每个索引可以包含多个 类型 。这些不同的类型存储着多个 文档 ,每个文档又有多个 属性 。
- 相似关系:
- 索引—数据库
- 类型—表
- 文档—表中的记录
- 属性—表中的列
3. 整合 ElasticSearch 测试
部署 ElasticSearch 环境(使用 Docker 部署,需要与 SpringData 对应)
引入
spring-boot-starter-data-elasticsearch
pom.xml
<!-- SpringBoot uses SpringData operation ElasticSearch by default --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
application.yaml
配置测试 ElasticSearch
自动配置:
SpringBoot 默认支持两种技术,来和 ElasticSearch 交互:
Jest(SpringBoot 2.0 后已经废弃,官方推荐使用 REST Client)SpringDataElasticSearch(ElasticSearch 版本有可能不合适)
Client 需要配置节点信息:(官方已经废弃)clusterNodes
和clusterName
ElasticSearchTemplate
:操作 ElasticSearch编写一个
ElasticsearchRepository
子接口来操作 ElasticSearch版本适配说明:https://github.com/spring-projects/spring-data-elasticsearch(从 2.0 开始 SpringBoot 会根据 ElasticSearch 版本拉取 SpringBoot 对应的版本依赖)
Spring Data Release Train Spring Data Elasticsearch Elasticsearch Spring Boot Moore 3.2.x 6.8.8 2.2.x Lovelace 3.1.x 6.2.2 2.1.x Kay 3.0.x 5.5.0 2.0.x Ingalls 2.1.x 2.4.0 1.5.x 如果版本不适配:
- 升级 SpringBoot 版本
- 安装对应版本的 ElasticSearch
两种用法:
- 编写一个
ElasticsearchRepository
子接口来操作 ElasticSearch
- 编写一个
使用参照文档:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference