此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.5.2spring-doc.cadn.net.cn

响应式 Elasticsearch 存储库

响应式 Elasticsearch 存储库支持建立在存储库中解释的核心存储库支持之上,利用通过响应式 REST 客户端执行的响应式 Elasticsearch作提供的作。spring-doc.cadn.net.cn

Spring Data Elasticsearch 响应式存储库支持使用 Project Reactor 作为其选择的响应式组合库。spring-doc.cadn.net.cn

有 3 个主要接口可供使用:spring-doc.cadn.net.cn

用法

要使用Repository,只需为它创建一个接口即可。 在您真正继续这样做之前,您需要一个实体。spring-doc.cadn.net.cn

示例 1.样本Person实体
public class Person {

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

  // … getters and setters omitted
}
请注意,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)
}
1 该方法显示对具有给定lastname.
2 Finder 方法等待输入Publisher绑定参数值firstname.
3 Finder 方法按以下方式对匹配文档进行排序lastname.
4 Finder 方法按通过Sort参数。
5 Pageable将偏移量和排序参数传递给数据库。
6 使用And / Or关键字。
7 找到第一个匹配的实体。
8 该方法显示对具有给定lastname通过运行带注释的@Query与给定的 参数。
9 计算所有匹配的实体firstname.
10 检查是否至少有一个匹配的实体firstname存在。
11 删除所有匹配的实体firstname.

配置

对于 Java 配置,请使用@EnableReactiveElasticsearchRepositories注解。如果未配置基本包, 基础结构扫描带注释的配置类的包。spring-doc.cadn.net.cn

以下列表显示了如何对存储库使用 Java 配置:spring-doc.cadn.net.cn

示例 3.存储库的 Java 配置
@Configuration
@EnableReactiveElasticsearchRepositories
public class Config extends AbstractReactiveElasticsearchConfiguration {

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

因为前面示例中的存储库扩展了ReactiveSortingRepository,所有 CRUD作都可用 以及对实体的排序访问方法。使用存储库实例是一个依赖性问题 将其注入客户端,如以下示例所示:spring-doc.cadn.net.cn

示例 4.对 Person 实体的排序访问权限
public class PersonRepositoryTests {

  @Autowired ReactivePersonRepository repository;

  @Test
  public void sortsElementsCorrectly() {

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

    // ...
  }
}