響應式 Elasticsearch 倉庫

響應式 Elasticsearch 倉庫支援基於 倉庫 中解釋的核心倉庫支援,利用 響應式 Elasticsearch 操作 提供的操作,並透過 響應式 REST 客戶端 執行。

Spring Data Elasticsearch 響應式倉庫支援使用 Project Reactor 作為其首選的響應式組合庫。

主要有 3 個介面可供使用

  • 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 該方法顯示了查詢所有具有給定 lastname 的人的查詢。
2 查詢方法等待 Publisher 的輸入,以繫結 firstname 的引數值。
3 查詢方法按 lastname 對匹配的文件進行排序。
4 查詢方法根據透過 Sort 引數定義的表示式對匹配的文件進行排序。
5 使用 Pageable 將偏移量和排序引數傳遞給資料庫。
6 查詢方法使用 And / Or 關鍵字連線條件。
7 查詢第一個匹配的實體。
8 該方法顯示了查詢所有具有給定 lastname 的人的查詢,透過執行帶有給定引數的帶註解的 @Query 進行查詢。
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 操作以及對實體進行排序訪問的方法都可用。使用倉庫例項是透過將其依賴注入到客戶端中,如下例所示

示例 4. 對 Person 實體的排序訪問
public class PersonRepositoryTests {

  @Autowired ReactivePersonRepository repository;

  @Test
  public void sortsElementsCorrectly() {

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

    // ...
  }
}
© . This site is unofficial and not affiliated with VMware.