Skip to content

Commit fe8c2b1

Browse files
authored
Add count methods to ELC's ReactiveElasticsearchClient.
Original Pull Request #2985 Closes #2749
1 parent 98716a8 commit fe8c2b1

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)