Elasticsearch 支持
Spring Data 对 Elasticsearch 的支持包含广泛的功能:
-
对各种 Elasticsearch 客户端 的 Spring 配置支持。
-
ElasticsearchTemplate 和 ReactiveElasticsearchTemplate 辅助类,提供 ES 索引操作与 POJO 之间的对象映射。
-
异常转换 为 Spring 的可移植 数据访问异常层次结构。
-
基于 注解的映射 元数据,可扩展以支持其他元数据格式。
-
基于 Java 的 查询、条件和更新 DSL。
-
自动实现 命令式和响应式 Repository 接口,包括对 自定义查询方法 的支持。
对于大多数面向数据的任务,你可以使用 [Reactive]ElasticsearchTemplate 或 Repository 支持,这两者都利用了丰富的对象映射功能。Spring Data Elasticsearch 在各种 API 中对对象使用了与 DataStax Java 驱动程序中一致的命名约定,这样它们看起来就会很熟悉,并且你可以将现有的知识映射到 Spring API 上。
章节摘要
Elasticsearch 客户端
本章介绍了支持的 Elasticsearch 客户端实现的配置和使用。
Elasticsearch 对象映射
Spring Data Elasticsearch 对象映射是将 Java 对象(即领域实体)映射为存储在 Elasticsearch 中的 JSON 表示形式的过程,反之亦然。内部用于此映射的类是 MappingElasticsearchConverter。
Elasticsearch 操作
Spring Data Elasticsearch 使用多个接口来定义可以针对 Elasticsearch 索引调用的操作(有关响应式接口的描述,请参见 Reactive Elasticsearch Operations)。
响应式 Elasticsearch 操作
ReactiveElasticsearchOperations 是通过 ReactiveElasticsearchClient 对 Elasticsearch 集群执行高级命令的网关。
实体回调
Spring Data 基础设施提供了在某些方法调用前后修改实体的钩子。这些所谓的 EntityCallback 实例提供了一种方便的方式来以回调风格检查和潜在修改实体。EntityCallback 看起来很像一个专门的 ApplicationListener。一些 Spring Data 模块会发布特定于存储的事件(例如 BeforeSaveEvent),这些事件允许修改给定的实体。在某些情况下,例如处理不可变类型时,这些事件可能会引发问题。此外,事件发布依赖于 ApplicationEventMulticaster。如果将其配置为异步的 TaskExecutor,可能会导致不可预测的结果,因为事件处理可能会被分叉到一个线程中。
Elasticsearch 审计
为了使审计代码能够决定实体实例是否为新的,实体必须实现 Persistable\<ID> 接口,该接口定义如下:
Join-Type 实现
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 的上下文中,您可以使用