リアクティブ Elasticsearch リポジトリ
リアクティブ Elasticsearch リポジトリサポートは、リアクティブ REST クライアントによって実行されるリアクティブ型 Elasticsearch オペレーションを介して提供される操作を利用して、リポジトリで説明されているコアリポジトリサポートに基づいて構築されます。
Spring Data Elasticsearch リアクティブリポジトリサポートでは、選択されたリアクティブコンポジションライブラリとしてプロジェクト Reactor (英語) が使用されます。
使用する主なインターフェースは 3 つあります。
ReactiveRepository
ReactiveCrudRepository
ReactiveSortingRepository
使用方法
Repository
を使用して Elasticsearch に格納されているドメインオブジェクトにアクセスするには、そのためのインターフェースを作成するだけです。実際にそれを実行する前に、エンティティが必要になります。
Person
エンティティのサンプル public class Person {
@Id
private String id;
private String firstname;
private String lastname;
private Address address;
// … getters and setters omitted
}
id プロパティは String 型である必要があることに注意してください。 |
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 メソッドは、firstname のパラメーター値をバインドするために Publisher からの入力を待機しています。 |
3 | lastname によって一致するドキュメントを順序付けする Finder メソッド。 |
4 | Sort パラメーターで定義された式によって一致するドキュメントを順序付けする Finder メソッド。 |
5 | Pageable を使用して、オフセットと並べ替えのパラメーターをデータベースに渡します。 |
6 | And / Or キーワードを使用して条件を連結するファインダーメソッド。 |
7 | 最初に一致するエンティティを見つけます。 |
8 | このメソッドは、指定されたパラメーターを使用してアノテーション付き @Query を実行することによって検索された、指定された lastname を持つすべての人々に対するクエリを示します。 |
9 | firstname と一致するすべてのエンティティをカウントします。 |
10 | 一致する firstname を持つエンティティが少なくとも 1 つ存在するかどうかを確認します。 |
11 | firstname と一致するすべてのエンティティを削除します。 |
構成
Java 構成の場合は、@EnableReactiveElasticsearchRepositories
アノテーションを使用します。基本パッケージが構成されていない場合、インフラストラクチャーは、アノテーションが付けられた構成クラスのパッケージをスキャンします。
次のリストは、リポジトリの Java 構成を使用する方法を示しています。
@Configuration
@EnableReactiveElasticsearchRepositories
public class Config extends AbstractReactiveElasticsearchConfiguration {
@Override
public ReactiveElasticsearchClient reactiveElasticsearchClient() {
return ReactiveRestClients.create(ClientConfiguration.localhost());
}
}
前の例のリポジトリは ReactiveSortingRepository
を継承しているため、エンティティへの並べ替えられたアクセスのメソッドだけでなく、すべての CRUD 操作も利用できます。次の例に示すように、リポジトリインスタンスの操作は、それをクライアントに注入する依存関係の問題です。
public class PersonRepositoryTests {
@Autowired ReactivePersonRepository repository;
@Test
public void sortsElementsCorrectly() {
Flux<Person> persons = repository.findAll(Sort.by(new Order(ASC, "lastname")));
// ...
}
}