Elasticsearch 支持
Spring Data 对 Elasticsearch 的支持包含丰富的特性:
-
对各种 Elasticsearch 客户端 的 Spring 配置支持。
-
ElasticsearchTemplate 与 ReactiveElasticsearchTemplate 辅助类,在 Elasticsearch 索引操作与 POJO 之间提供对象映射。
-
基于注解的映射元数据,可扩展以支持其他元数据格式。
-
基于 Java 的查询、条件与更新 DSL。
-
自动实现命令式与响应式仓库接口,包括对自定义实现的支持。
对于大多数面向数据的任务,您可以使用 [Reactive]ElasticsearchTemplate 或 Repository 支持,二者都利用了丰富的对象映射功能。Spring Data Elasticsearch 在各种 API 的对象命名上采用与 DataStax Java Driver 一致的约定,从而使其令人熟悉,并使您能够将已有的知识映射到 Spring API 上。
本节小结
Elasticsearch 客户端
本章介绍受支持的 Elasticsearch 客户端实现的配置与用法。
Elasticsearch 对象映射
Spring Data Elasticsearch 对象映射是这样一个过程:它将一个 Java 对象 —— 领域实体 —— 映射为存储在 Elasticsearch 中的 JSON 表示形式,反之亦然。内部用于此映射的类是 MappingElasticsearchConverter 。
Elasticsearch 操作
Spring Data Elasticsearch 使用若干接口来定义可针对 Elasticsearch 索引调用的操作(响应式接口的说明请参阅响应式 Elasticsearch 操作)。
响应式 Elasticsearch 操作
ReactiveElasticsearchOperations 是使用 ReactiveElasticsearchClient 对 Elasticsearch 集群执行高层命令的入口。
实体回调
Spring Data 基础设施提供了钩子,用于在某些方法调用前后修改实体。这些所谓的 EntityCallback 实例提供了一种便捷方式,以回调风格检查并可能修改实体。 EntityCallback 看起来很像一个专门化的 ApplicationListener 。某些 Spring Data 模块会发布特定存储的事件(例如 BeforeSaveEvent ),允许修改给定的实体。在某些情况下,例如处理不可变类型时,这些事件可能会带来问题。此外,事件发布依赖于 ApplicationEventMulticaster 。如果为其配置了异步 TaskExecutor ,可能会导致不可预测的结果,因为事件处理可能被分派到另一个线程上。
Elasticsearch 审计
为了让审计代码能够判断一个实体实例是否为新建,实体必须实现 Persistable<ID> 接口,该接口定义如下:
连接类型实现
Spring Data Elasticsearch 支持 Join 数据类型,用于创建相应的索引映射并存储相关信息。
路由值
当 Elasticsearch 将文档存储到具有多个分片的索引中时,它会根据文档的 id 确定要使用的分片。有时需要预先指定多个文档应索引到同一个分片上(连接类型、对相关数据的更快搜索)。为此, Elasticsearch 提供了定义路由的能力,即用于计算分片的值,而不是使用 id 。
其他 Elasticsearch 操作支持
本章介绍无法通过仓库接口直接访问的其他 Elasticsearch 操作支持。建议按照自定义仓库实现一节所述,将这些操作添加为自定义实现。
脚本化字段与运行时字段
Spring Data Elasticsearch 支持脚本化字段和运行时字段。有关这方面的详细信息,请参阅 Elasticsearch 关于脚本编写( www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html )和运行时字段( www.elastic.co/guide/en/elasticsearch/reference/8.9/runtime.html )的文档。在 Spring Data Elasticsearch 的上下文中,您可以使用