Add count methods to ELC's ReactiveElasticsearchClient.

Original Pull Request #2985
Closes #2749
This commit is contained in:
Maryanto 2024-10-17 22:13:28 +07:00 committed by GitHub
parent 98716a871b
commit fe8c2b13b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 61 additions and 0 deletions

View File

@ -36,6 +36,7 @@ import org.springframework.util.Assert;
* Reactive version of {@link co.elastic.clients.elasticsearch.ElasticsearchClient}. * Reactive version of {@link co.elastic.clients.elasticsearch.ElasticsearchClient}.
* *
* @author Peter-Josef Meisch * @author Peter-Josef Meisch
* @author maryantocinn
* @since 4.4 * @since 4.4
*/ */
public class ReactiveElasticsearchClient extends ApiClient<ElasticsearchTransport, ReactiveElasticsearchClient> public class ReactiveElasticsearchClient extends ApiClient<ElasticsearchTransport, ReactiveElasticsearchClient>
@ -227,6 +228,26 @@ public class ReactiveElasticsearchClient extends ApiClient<ElasticsearchTranspor
return deleteByQuery(fn.apply(new DeleteByQueryRequest.Builder()).build()); return deleteByQuery(fn.apply(new DeleteByQueryRequest.Builder()).build());
} }
/**
* @since 5.4
*/
public Mono<CountResponse> 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<CountResponse> count(Function<CountRequest.Builder, ObjectBuilder<CountRequest>> fn) {
Assert.notNull(fn, "fn must not be null");
return count(fn.apply(new CountRequest.Builder()).build());
}
// endregion // endregion
// region search // region search

View File

@ -22,6 +22,8 @@ import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch._types.mapping.TypeMapping; import co.elastic.clients.elasticsearch._types.mapping.TypeMapping;
import co.elastic.clients.elasticsearch.cluster.HealthRequest; import co.elastic.clients.elasticsearch.cluster.HealthRequest;
import co.elastic.clients.elasticsearch.cluster.HealthResponse; 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.IndexRequest;
import co.elastic.clients.elasticsearch.core.IndexResponse; import co.elastic.clients.elasticsearch.core.IndexResponse;
import co.elastic.clients.elasticsearch.core.SearchRequest; 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. * on port 9200 and an intercepting proxy on port 8080.
* *
* @author Peter-Josef Meisch * @author Peter-Josef Meisch
* @author maryantocinn
*/ */
@Disabled @Disabled
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@ -352,6 +355,43 @@ public class DevTests {
private ResponseBody<EntityAsMap> searchReactive(SearchRequest searchRequest) { private ResponseBody<EntityAsMap> searchReactive(SearchRequest searchRequest) {
return Objects.requireNonNull(reactiveElasticsearchClient.search(searchRequest, EntityAsMap.class).block()); 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 // endregion
private ClientConfiguration clientConfiguration() { private ClientConfiguration clientConfiguration() {