Skip to content

Commit 6180f59

Browse files
authored
Use ExistsRequest instead of GetRequest to check if documents exists.
Original Pull Re1uest #2728 Closes #2726
1 parent db3ad13 commit 6180f59

File tree

4 files changed

+27
-16
lines changed

4 files changed

+27
-16
lines changed

src/main/java/org/springframework/data/elasticsearch/client/elc/ElasticsearchTemplate.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ private ClusterTemplate getClusterTemplate() {
125125
public <T> T get(String id, Class<T> clazz, IndexCoordinates index) {
126126

127127
GetRequest getRequest = requestConverter.documentGetRequest(elasticsearchConverter.convertId(id),
128-
routingResolver.getRouting(), index, false);
128+
routingResolver.getRouting(), index);
129129
GetResponse<EntityAsMap> getResponse = execute(client -> client.get(getRequest, EntityAsMap.class));
130130

131131
ReadDocumentCallback<T> callback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index);
@@ -221,9 +221,9 @@ protected boolean doExists(String id, IndexCoordinates index) {
221221
Assert.notNull(id, "id must not be null");
222222
Assert.notNull(index, "index must not be null");
223223

224-
GetRequest request = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index, true);
224+
ExistsRequest request = requestConverter.documentExistsRequest(id, routingResolver.getRouting(), index);
225225

226-
return execute(client -> client.get(request, EntityAsMap.class)).found();
226+
return execute(client -> client.exists(request)).value();
227227
}
228228

229229
@Override

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

+7
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ public <T> Mono<GetResponse<T>> get(GetRequest request, Class<T> tClass) {
128128
return Mono.fromFuture(transport.performRequestAsync(request, endpoint, transportOptions));
129129
}
130130

131+
public Mono<BooleanResponse> exists(ExistsRequest request) {
132+
133+
Assert.notNull(request, "request must not be null");
134+
135+
return Mono.fromFuture(transport.performRequestAsync(request, ExistsRequest._ENDPOINT, transportOptions));
136+
}
137+
131138
public <T, P> Mono<UpdateResponse<T>> update(UpdateRequest<T, P> request, Class<T> clazz) {
132139

133140
Assert.notNull(request, "request must not be null");

src/main/java/org/springframework/data/elasticsearch/client/elc/ReactiveElasticsearchTemplate.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import co.elastic.clients.elasticsearch.core.search.ResponseBody;
2626
import co.elastic.clients.json.JsonpMapper;
2727
import co.elastic.clients.transport.Version;
28+
import co.elastic.clients.transport.endpoints.BooleanResponse;
2829
import org.apache.commons.logging.Log;
2930
import org.apache.commons.logging.LogFactory;
3031
import reactor.core.publisher.Flux;
@@ -148,9 +149,11 @@ protected Mono<Boolean> doExists(String id, IndexCoordinates index) {
148149
Assert.notNull(id, "id must not be null");
149150
Assert.notNull(index, "index must not be null");
150151

151-
GetRequest getRequest = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index, true);
152+
ExistsRequest existsRequest = requestConverter.documentExistsRequest(id, routingResolver.getRouting(), index);
152153

153-
return Mono.from(execute(client -> client.get(getRequest, EntityAsMap.class))).map(GetResult::found) //
154+
return Mono.from(execute(
155+
((ClientCallback<Publisher<BooleanResponse>>) client -> client.exists(existsRequest))))
156+
.map(BooleanResponse::value) //
154157
.onErrorReturn(NoSuchIndexException.class, false);
155158
}
156159

@@ -171,7 +174,7 @@ public <T> Mono<T> get(String id, Class<T> entityType, IndexCoordinates index) {
171174
Assert.notNull(entityType, "entityType must not be null");
172175
Assert.notNull(index, "index must not be null");
173176

174-
GetRequest getRequest = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index, false);
177+
GetRequest getRequest = requestConverter.documentGetRequest(id, routingResolver.getRouting(), index);
175178

176179
Mono<GetResponse<EntityAsMap>> getResponse = Mono
177180
.from(execute(client -> client.get(getRequest, EntityAsMap.class)));

src/main/java/org/springframework/data/elasticsearch/client/elc/RequestConverter.java

+11-10
Original file line numberDiff line numberDiff line change
@@ -780,25 +780,26 @@ public BulkRequest documentBulkRequest(List<?> queries, BulkOptions bulkOptions,
780780
return builder.build();
781781
}
782782

783-
public GetRequest documentGetRequest(String id, @Nullable String routing, IndexCoordinates indexCoordinates,
784-
boolean forExistsRequest) {
783+
public GetRequest documentGetRequest(String id, @Nullable String routing, IndexCoordinates indexCoordinates) {
785784

786785
Assert.notNull(id, "id must not be null");
787786
Assert.notNull(indexCoordinates, "indexCoordinates must not be null");
788787

789-
return GetRequest.of(grb -> {
790-
grb //
788+
return GetRequest.of(grb -> grb //
791789
.index(indexCoordinates.getIndexName()) //
792790
.id(id) //
793-
.routing(routing);
791+
.routing(routing));
792+
}
794793

795-
if (forExistsRequest) {
796-
grb.source(scp -> scp.fetch(false));
797-
}
794+
public co.elastic.clients.elasticsearch.core.ExistsRequest documentExistsRequest(String id, @Nullable String routing, IndexCoordinates indexCoordinates) {
798795

799-
return grb;
800-
});
796+
Assert.notNull(id, "id must not be null");
797+
Assert.notNull(indexCoordinates, "indexCoordinates must not be null");
801798

799+
return co.elastic.clients.elasticsearch.core.ExistsRequest.of(erb -> erb
800+
.index(indexCoordinates.getIndexName())
801+
.id(id)
802+
.routing(routing));
802803
}
803804

804805
public <T> MgetRequest documentMgetRequest(Query query, Class<T> clazz, IndexCoordinates index) {

0 commit comments

Comments
 (0)