diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java index 6db42dda7..3175fcb8d 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java @@ -125,7 +125,7 @@ private ClusterTemplate getClusterTemplate() { public T get(String id, Class clazz, IndexCoordinates index) { GetRequest getRequest = requestConverter.documentGetRequest(elasticsearchConverter.convertId(id), - routingResolver.getRouting(), index, false); + routingResolver.getRouting(), index); GetResponse getResponse = execute(client -> client.get(getRequest, EntityAsMap.class)); ReadDocumentCallback callback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index); @@ -221,9 +221,9 @@ protected boolean doExists(String id, IndexCoordinates index) { Assert.notNull(id, "id must not be null"); Assert.notNull(index, "index must not be null"); - GetRequest request = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index, true); + ExistsRequest request = requestConverter.documentExistsRequest(id, routingResolver.getRouting(), index); - return execute(client -> client.get(request, EntityAsMap.class)).found(); + return execute(client -> client.exists(request)).value(); } @Override 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 39131d78d..5f65f2549 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 @@ -128,6 +128,13 @@ public Mono> get(GetRequest request, Class tClass) { return Mono.fromFuture(transport.performRequestAsync(request, endpoint, transportOptions)); } + public Mono exists(ExistsRequest request) { + + Assert.notNull(request, "request must not be null"); + + return Mono.fromFuture(transport.performRequestAsync(request, ExistsRequest._ENDPOINT, transportOptions)); + } + public Mono> update(UpdateRequest request, Class clazz) { Assert.notNull(request, "request must not be null"); diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java index e3a8cda37..167f81947 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java @@ -25,6 +25,7 @@ import co.elastic.clients.elasticsearch.core.search.ResponseBody; import co.elastic.clients.json.JsonpMapper; import co.elastic.clients.transport.Version; +import co.elastic.clients.transport.endpoints.BooleanResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import reactor.core.publisher.Flux; @@ -148,9 +149,11 @@ protected Mono doExists(String id, IndexCoordinates index) { Assert.notNull(id, "id must not be null"); Assert.notNull(index, "index must not be null"); - GetRequest getRequest = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index, true); + ExistsRequest existsRequest = requestConverter.documentExistsRequest(id, routingResolver.getRouting(), index); - return Mono.from(execute(client -> client.get(getRequest, EntityAsMap.class))).map(GetResult::found) // + return Mono.from(execute( + ((ClientCallback>) client -> client.exists(existsRequest)))) + .map(BooleanResponse::value) // .onErrorReturn(NoSuchIndexException.class, false); } @@ -171,7 +174,7 @@ public Mono get(String id, Class entityType, IndexCoordinates index) { Assert.notNull(entityType, "entityType must not be null"); Assert.notNull(index, "index must not be null"); - GetRequest getRequest = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index, false); + GetRequest getRequest = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index); Mono> getResponse = Mono .from(execute(client -> client.get(getRequest, EntityAsMap.class))); diff --git a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java index 623e3e321..166252a71 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java @@ -780,25 +780,26 @@ public BulkRequest documentBulkRequest(List queries, BulkOptions bulkOptions, return builder.build(); } - public GetRequest documentGetRequest(String id, @Nullable String routing, IndexCoordinates indexCoordinates, - boolean forExistsRequest) { + public GetRequest documentGetRequest(String id, @Nullable String routing, IndexCoordinates indexCoordinates) { Assert.notNull(id, "id must not be null"); Assert.notNull(indexCoordinates, "indexCoordinates must not be null"); - return GetRequest.of(grb -> { - grb // + return GetRequest.of(grb -> grb // .index(indexCoordinates.getIndexName()) // .id(id) // - .routing(routing); + .routing(routing)); + } - if (forExistsRequest) { - grb.source(scp -> scp.fetch(false)); - } + public co.elastic.clients.elasticsearch.core.ExistsRequest documentExistsRequest(String id, @Nullable String routing, IndexCoordinates indexCoordinates) { - return grb; - }); + Assert.notNull(id, "id must not be null"); + Assert.notNull(indexCoordinates, "indexCoordinates must not be null"); + return co.elastic.clients.elasticsearch.core.ExistsRequest.of(erb -> erb + .index(indexCoordinates.getIndexName()) + .id(id) + .routing(routing)); } public MgetRequest documentMgetRequest(Query query, Class clazz, IndexCoordinates index) {