反应弹性搜索仓库
响应式 Elasticsearch 仓库支持基于 Repositories 中解释的核心仓库支持,利用响应式 Elasticsearch作由响应式 REST 客户端执行的作。
Spring Data Elasticsearch 响应式仓库支持 Project Reactor 作为其首选的响应式组合库。
主要有三种接口:
-
ReactiveRepository -
ReactiveCrudRepository -
ReactiveSortingRepository
用法
访问存储在 Elasticsearch 中的域对象时,使用存储 库只需为它创建一个接口即可。
在你真正开始行动之前,你需要一个实体。
例子1。样本
人实体public class Person {
@Id
private String id;
private String firstname;
private String lastname;
private Address address;
// … getters and setters omitted
}
请注意身份证房产必须是类型字符串. |
例子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 | 该方法显示所有满足 的查询姓氏. |
| 2 | 等待输入的查找方法发行人绑定参数值名称. |
| 3 | 查找方法通过以下方式排序匹配文件姓氏. |
| 4 | 查找方法通过定义的表达式对匹配文档进行排序排序参数。 |
| 5 | 用可页面将偏移和排序参数传递给数据库。 |
| 6 | 查找方法结合准则和 / 或关键字。 |
| 7 | 找到第一个匹配的实体。 |
| 8 | 该方法显示所有满足 的查询姓氏通过运行注释查找@Query给定
参数。 |
| 9 | 统计所有匹配实体名称. |
| 10 | 检查至少有一个实体与之匹配名称存在。 |
| 11 | 删除所有与匹配的实体名称. |
配置
对于 Java 配置,可以使用@EnableReactiveElasticsearchRepositories注解。如果没有基础包的配置,
基础设施扫描注释配置类的包。
以下列表展示了如何使用 Java 配置来构建仓库:
例子3。仓库的 Java 配置
@Configuration
@EnableReactiveElasticsearchRepositories
public class Config extends AbstractReactiveElasticsearchConfiguration {
@Override
public ReactiveElasticsearchClient reactiveElasticsearchClient() {
return ReactiveRestClients.create(ClientConfiguration.localhost());
}
}
因为前面例子中的仓库是扩展的ReactiveSortingRepository,所有CRUD作均可使用。
以及对实体进行排序访问的方法。与仓库实例合作是依赖问题
将它注入客户端,如下示例所示:
例子4。对人实体的排序访问
public class PersonRepositoryTests {
@Autowired ReactivePersonRepository repository;
@Test
public void sortsElementsCorrectly() {
Flux<Person> persons = repository.findAll(Sort.by(new Order(ASC, "lastname")));
// ...
}
}