Skip to content

Commit 6ba63ec

Browse files
committed
Add count methods to ELC's ReactiveElasticsearchClient.
Implemented count methods using CountRequest directly with ELC's ReactiveElasticsearchClient, eliminating the need to initialize any entity or repository. Closes spring-projects#2749
1 parent 98716a8 commit 6ba63ec

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java

+21
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
* Reactive version of {@link co.elastic.clients.elasticsearch.ElasticsearchClient}.
3737
*
3838
* @author Peter-Josef Meisch
39+
* @author maryantocinn
3940
* @since 4.4
4041
*/
4142
public class ReactiveElasticsearchClient extends ApiClient<ElasticsearchTransport, ReactiveElasticsearchClient>
@@ -227,6 +228,26 @@ public Mono<DeleteByQueryResponse> deleteByQuery(
227228
return deleteByQuery(fn.apply(new DeleteByQueryRequest.Builder()).build());
228229
}
229230

231+
/**
232+
* @since 5.4
233+
*/
234+
public Mono<CountResponse> count(CountRequest request) {
235+
236+
Assert.notNull(request, "request must not be null");
237+
238+
return Mono.fromFuture(transport.performRequestAsync(request, CountRequest._ENDPOINT, transportOptions));
239+
}
240+
241+
/**
242+
* @since 5.4
243+
*/
244+
public Mono<CountResponse> count(Function<CountRequest.Builder, ObjectBuilder<CountRequest>> fn) {
245+
246+
Assert.notNull(fn, "fn must not be null");
247+
248+
return count(fn.apply(new CountRequest.Builder()).build());
249+
}
250+
230251
// endregion
231252
// region search
232253

Diff for: src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java

+40
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import co.elastic.clients.elasticsearch._types.mapping.TypeMapping;
2323
import co.elastic.clients.elasticsearch.cluster.HealthRequest;
2424
import co.elastic.clients.elasticsearch.cluster.HealthResponse;
25+
import co.elastic.clients.elasticsearch.core.CountRequest;
26+
import co.elastic.clients.elasticsearch.core.CountResponse;
2527
import co.elastic.clients.elasticsearch.core.IndexRequest;
2628
import co.elastic.clients.elasticsearch.core.IndexResponse;
2729
import co.elastic.clients.elasticsearch.core.SearchRequest;
@@ -62,6 +64,7 @@
6264
* on port 9200 and an intercepting proxy on port 8080.
6365
*
6466
* @author Peter-Josef Meisch
67+
* @author maryantocinn
6568
*/
6669
@Disabled
6770
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@@ -352,6 +355,43 @@ private ResponseBody<EntityAsMap> searchImperative(SearchRequest searchRequest)
352355
private ResponseBody<EntityAsMap> searchReactive(SearchRequest searchRequest) {
353356
return Objects.requireNonNull(reactiveElasticsearchClient.search(searchRequest, EntityAsMap.class).block());
354357
}
358+
359+
// endregion
360+
// region count
361+
@Test
362+
@Order(40)
363+
void count() {
364+
365+
CountRequest countRequest = new CountRequest.Builder().index(INDEX)
366+
.query(query -> query.match(matchQuery -> matchQuery.field("content").query(FieldValue.of("content1"))))
367+
.build();
368+
369+
CountResponse countResponse = null;
370+
371+
try {
372+
countResponse = countImperative(countRequest);
373+
assertThat(countResponse).isNotNull();
374+
assertThat(countResponse.count()).isEqualTo(1);
375+
} catch (IOException e) {
376+
LOGGER.error("error", e);
377+
}
378+
379+
try {
380+
countResponse = countReactive(countRequest);
381+
assertThat(countResponse).isNotNull();
382+
assertThat(countResponse.count()).isEqualTo(1);
383+
} catch (Exception e) {
384+
LOGGER.error("error", e);
385+
}
386+
}
387+
388+
private CountResponse countImperative(CountRequest countRequest) throws IOException {
389+
return imperativeElasticsearchClient.count(countRequest);
390+
}
391+
392+
private CountResponse countReactive(CountRequest countRequest) {
393+
return Objects.requireNonNull(reactiveElasticsearchClient.count(countRequest).block());
394+
}
355395
// endregion
356396

357397
private ClientConfiguration clientConfiguration() {

0 commit comments

Comments
 (0)