Spring整合Elasticsearch----响应式Reactive存储库

本文介绍了如何在SpringDataElasticsearch中使用ReactiveRepository接口访问和操作Elasticsearch中的数据,包括CRUD操作、排序、查询和配置示例。展示了如何创建实体、接口和使用Java配置来启用响应式存储库。
摘要由CSDN通过智能技术生成

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")));

    // ...
  }
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值