跳到主要内容

响应式 Elasticsearch 仓库

DeepSeek V3 中英对照 Reactive Elasticsearch Repositories

Reactive Elasticsearch 仓库支持建立在核心仓库支持的基础上,利用通过 Reactive Elasticsearch 操作 提供的操作,这些操作由 Reactive REST 客户端 执行。

Spring Data Elasticsearch 响应式仓库支持使用 Project Reactor 作为其选择的响应式组合库。

以下是需要使用的 3 个主要接口:

  • ReactiveRepository

  • ReactiveCrudRepository

  • ReactiveSortingRepository

这些是 Spring Data 中用于响应式编程的仓库接口。它们分别提供了基本的响应式操作、CRUD 操作以及排序功能。

用法

要访问存储在 Elasticsearch 中的领域对象,只需为其创建一个接口。但在实际进行之前,你需要一个实体。

示例 1. 示例 Person 实体

public class Person {

@Id
private String id;
private String firstname;
private String lastname;
private Address address;

// … getters and setters omitted
}
java
备注

请注意,id 属性需要是 String 类型。

示例 2. 用于持久化 Person 实体的基础仓库接口

interface ReactivePersonRepository extends ReactiveSortingRepository<Person, String> {

Flux<Person> findByFirstname(String firstname); // <1>

Flux<Person> findByFirstname(Publisher<String> firstname); // <2>

Flux<Person> findByFirstnameOrderByLastname(String firstname); // <3>

Flux<Person> findByFirstname(String firstname, Sort sort); // <4>

Flux<Person> findByFirstname(String firstname, Pageable page); // <5>

Mono<Person> findByFirstnameAndLastname(String firstname, String lastname); // <6>

Mono<Person> findFirstByLastname(String lastname); // <7>

@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"lastname\" : \"?0\" } } } }")
Flux<Person> findByLastname(String lastname); // <8>

Mono<Long> countByFirstname(String firstname) // <9>

Mono<Boolean> existsByFirstname(String firstname) // <10>

Mono<Long> deleteByFirstname(String firstname) // <11>
}
none
  • 该方法展示了一个查询,用于查找所有具有给定 lastname 的人。

  • Finder 方法等待从 Publisher 获取输入,以绑定 firstname 的参数值。

  • Finder 方法通过 lastname 对匹配的文档进行排序。

  • Finder 方法通过 Sort 参数定义的表达式对匹配的文档进行排序。

  • 使用 Pageable 将偏移量和排序参数传递给数据库。

  • Finder 方法使用 And / Or 关键字连接查询条件。

  • 查找第一个匹配的实体。

  • 该方法展示了一个查询,用于查找所有具有给定 lastname 的人,通过运行带参数的注解 @Query 进行查找。

  • 计算所有具有匹配 firstname 的实体的数量。

  • 检查是否存在至少一个具有匹配 firstname 的实体。

  • 删除所有具有匹配 firstname 的实体。

配置

对于 Java 配置,使用 @EnableReactiveElasticsearchRepositories 注解。如果没有配置基础包,基础设施会扫描注解配置类所在的包。

以下列表展示了如何使用 Java 配置来配置一个仓库:

示例 3. 存储库的 Java 配置

@Configuration
@EnableReactiveElasticsearchRepositories
public class Config extends AbstractReactiveElasticsearchConfiguration {

@Override
public ReactiveElasticsearchClient reactiveElasticsearchClient() {
return ReactiveRestClients.create(ClientConfiguration.localhost());
}
}
java

由于上一个示例中的仓库扩展了 ReactiveSortingRepository,因此所有 CRUD 操作以及对实体进行排序访问的方法都可用。使用仓库实例只需将其依赖注入到客户端即可,如下例所示:

示例 4. 对 Person 实体的排序访问

public class PersonRepositoryTests {

@Autowired ReactivePersonRepository repository;

@Test
public void sortsElementsCorrectly() {

Flux<Person> persons = repository.findAll(Sort.by(new Order(ASC, "lastname")));

// ...
}
}
java