0
点赞
收藏
分享

微信扫一扫

Spring Data访问Elasticsearch----响应式Reactive存储库

Spring Data访问Elasticsearch----响应式Reactive存储库


Reactive Elasticsearch存储库支持建立在存储库中解释的核心存储库支持之上,利用由 Reactive REST客户端执行的 Reactive Elasticsearch Operations提供的操作。
Spring Data Elasticsearch响应式存储库支持使用Project Reactor作为其选择的响应式组合库。
有三个主要接口可供使用:

  • ReactiveRepository
  • ReactiveCrudRepository
  • ReactiveSortingRepository

一、用法

要使用Repository访问存储在Elasticsearch中的域对象,只需为它创建一个接口。在你真正开始之前,你需要一个实体。
例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. 该方法显示具有给定firstname的所有人的查询。
2. Finder方法正在等待Publisher的输入以绑定firstname的参数值。
3. Finder方法按lastname排序匹配的文档。
4. Finder方法通过Sort参数定义的表达式对匹配的文档进行排序。
5. 使用Pageable将偏移量和排序参数传递到数据库。
6. Finder方法使用And/Or关键字连接条件。
7. 查找第一个匹配的实体。
8. 该方法显示了通过使用给定参数运行@Query注解来查找的具有给定lastname的所有人的查询。
9. 统计所有firstname匹配的实体。
10. 检查是否至少存在一个firstname匹配的实体。
11. 删除所有firstname匹配的实体。

二、配置

对于Java配置,使用@EnableReactiveElasticsearchRepositories注解。如果没有配置基础包,基础结构将扫描带注解的配置类的包。下面的清单显示了如何为存储库使用Java配置:
例3:存储库的Java配置

@Configuration
@EnableReactiveElasticsearchRepositories
public class Config extends AbstractReactiveElasticsearchConfiguration {

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

因为前一个示例中的存储库扩展了ReactiveSortingRepository,所以所有CRUD操作以及对实体进行排序访问的方法都是可用的。使用存储库实例是一个将依赖项注入client的问题,如下面的示例所示:
例4:对Person实体的排序访问

public class PersonRepositoryTests {

  @Autowired ReactivePersonRepository repository;

  @Test
  public void sortsElementsCorrectly() {

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

    // ...
  }
}
举报

相关推荐

0 条评论