diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java index 50bc8036f..958b1f59f 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchClient.java @@ -36,6 +36,7 @@ import org.springframework.util.Assert; * Reactive version of {@link co.elastic.clients.elasticsearch.ElasticsearchClient}. * * @author Peter-Josef Meisch + * @author maryantocinn * @since 4.4 */ public class ReactiveElasticsearchClient extends ApiClient @@ -227,6 +228,26 @@ public class ReactiveElasticsearchClient extends ApiClient count(CountRequest request) { + + Assert.notNull(request, "request must not be null"); + + return Mono.fromFuture(transport.performRequestAsync(request, CountRequest._ENDPOINT, transportOptions)); + } + + /** + * @since 5.4 + */ + public Mono count(Function> fn) { + + Assert.notNull(fn, "fn must not be null"); + + return count(fn.apply(new CountRequest.Builder()).build()); + } + // endregion // region search diff --git a/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java b/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java index 856d5a3d3..81aabf402 100644 --- a/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/client/elc/DevTests.java @@ -22,6 +22,8 @@ import co.elastic.clients.elasticsearch._types.FieldValue; import co.elastic.clients.elasticsearch._types.mapping.TypeMapping; import co.elastic.clients.elasticsearch.cluster.HealthRequest; import co.elastic.clients.elasticsearch.cluster.HealthResponse; +import co.elastic.clients.elasticsearch.core.CountRequest; +import co.elastic.clients.elasticsearch.core.CountResponse; import co.elastic.clients.elasticsearch.core.IndexRequest; import co.elastic.clients.elasticsearch.core.IndexResponse; import co.elastic.clients.elasticsearch.core.SearchRequest; @@ -62,6 +64,7 @@ import org.springframework.lang.Nullable; * on port 9200 and an intercepting proxy on port 8080. * * @author Peter-Josef Meisch + * @author maryantocinn */ @Disabled @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @@ -352,6 +355,43 @@ public class DevTests { private ResponseBody searchReactive(SearchRequest searchRequest) { return Objects.requireNonNull(reactiveElasticsearchClient.search(searchRequest, EntityAsMap.class).block()); } + + // endregion + // region count + @Test + @Order(40) + void count() { + + CountRequest countRequest = new CountRequest.Builder().index(INDEX) + .query(query -> query.match(matchQuery -> matchQuery.field("content").query(FieldValue.of("content1")))) + .build(); + + CountResponse countResponse = null; + + try { + countResponse = countImperative(countRequest); + assertThat(countResponse).isNotNull(); + assertThat(countResponse.count()).isEqualTo(1); + } catch (IOException e) { + LOGGER.error("error", e); + } + + try { + countResponse = countReactive(countRequest); + assertThat(countResponse).isNotNull(); + assertThat(countResponse.count()).isEqualTo(1); + } catch (Exception e) { + LOGGER.error("error", e); + } + } + + private CountResponse countImperative(CountRequest countRequest) throws IOException { + return imperativeElasticsearchClient.count(countRequest); + } + + private CountResponse countReactive(CountRequest countRequest) { + return Objects.requireNonNull(reactiveElasticsearchClient.count(countRequest).block()); + } // endregion private ClientConfiguration clientConfiguration() {