Spring Data家族对Elasticsearch也进行了封装支持,使用spring-data-elasticsearch,就像使用spring-data-jpa、spring-data-solr、spring-data-redis、spring-data-mongodb等一样操作简单,它们封装的方法类似,提供的接口格式都基本相同,所以开发流程也基本是一样的。
spring-data-elasticsearch 是 Spring Data 的 Community modules 之一,是 Spring Data 对 Elasticsearch 引擎的实现。
Elasticsearch 默认提供轻量级的 HTTP Restful 接口形式的访问。相对来说,使用 HTTP Client 调用也很简单。但 spring-data-elasticsearch 可以更快的支持构建在 Spring 应用上,比如在 application.properties 配置 ES 节点信息和 spring-boot-starter-data-elasticsearch 依赖,直接在 Spring Boot 应用上使用。
1. ElasticsearchRepository 接口
ElasticsearchRepository 是Elasticsearch 通用的存储接口的一种默认实现。Spring 根据接口定义的方法名,具体执行对应的数据存储实现。
ElasticsearchRepository 继承 ElasticsearchCrudRepository ,ElasticsearchCrudRepository 继承 PagingAndSortingRepository,所以一般 CRUD 带分页已经支持。
先看看 ElasticsearchRepository 接口的定义。
@NoRepositoryBean
public interface ElasticsearchRepository extends ElasticsearchCrudRepository {
S index(S var1);Iterable search(QueryBuilder var1);
Page search(QueryBuilder var1, Pageable var2);
Page search(SearchQuery var1);
Page searchSimilar(T var1, String[] var2, Pageable var3);
void refresh();
Class getEntityClass();
}
ElasticsearchRepository 继承关系如下所示。除了有CRUD的基本功能之外,还有分页和排序。
/**
* 接口关系:
* ElasticsearchRepository --> ElasticsearchCrudRepository --> PagingAndSortingRepository --> CrudRepository --> Repository
*/
这里的Repository相当于DAO,操作MySQL 还是elasticsearch都是一样的。
2. spring-data-elasticsearch 依赖包
pom文件中导入依赖。
org.springframework.boot
spring-boot-starter-data-elasticsearch
org.springframework.boot
spring-boot-starter-parent
2.1.7.RELEASE
如下是相关jar版本以及依赖关系。
Spring Data Elasticsearch 和 Elasticsearch 版本之间的兼容性,可以参考如下表格:
https://github.com/spring-projects/spring-data-elasticsearch
如果想要使用最新的 Elasticsearch,可以通过默认的Java High Level REST Client API调用去实现。
3. 添加Elasticsearch相关配置项
修改application.yml配置文件,添加Elasticsearch 节点配置。
spring:
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9300
默认 9300 是 Java 客户端的端口。9200 是支持 Restful HTTP 的接口。
cluster-name:elasticsearch 集群名。(默认值: elasticsearch)
cluster-nodes:集群节点地址列表,用逗号分隔。
repositories.enabled: 开启 Elasticsearch 仓库。(默认值:true)
4. Elasticsearch 数据操作层
接口只要继承 ElasticsearchRepository 类即可。
默认会提供很多实现,比如 CRUD 和搜索相关的实现。类似于 JPA 读取数据,是使用 CrudRepository 进行操作 ES 数据。支持的默认方法有: count(), findAll(), findOne(ID), delete(ID), deleteAll(), exists(ID), save(DomainObject), save(Iterable)。
完整代码,可以参考如下链接:
Elasticsearch 6.4.3 和Spring Boot 2.1.7集成-实战演练完整代码