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 的上下文中,您可以使用