mirror of
				https://github.com/spring-projects/spring-data-elasticsearch.git
				synced 2025-10-30 22:28:47 +00:00 
			
		
		
		
	Use ExistsRequest instead of GetRequest to check if documents exists.
Original Pull Re1uest #2728 Closes #2726
This commit is contained in:
		
							parent
							
								
									db3ad1338c
								
							
						
					
					
						commit
						6180f596d8
					
				| @ -125,7 +125,7 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate { | ||||
| 	public <T> T get(String id, Class<T> clazz, IndexCoordinates index) { | ||||
| 
 | ||||
| 		GetRequest getRequest = requestConverter.documentGetRequest(elasticsearchConverter.convertId(id), | ||||
| 				routingResolver.getRouting(), index, false); | ||||
| 				routingResolver.getRouting(), index); | ||||
| 		GetResponse<EntityAsMap> getResponse = execute(client -> client.get(getRequest, EntityAsMap.class)); | ||||
| 
 | ||||
| 		ReadDocumentCallback<T> callback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index); | ||||
| @ -221,9 +221,9 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate { | ||||
| 		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 | ||||
|  | ||||
| @ -128,6 +128,13 @@ public class ReactiveElasticsearchClient extends ApiClient<ElasticsearchTranspor | ||||
| 		return Mono.fromFuture(transport.performRequestAsync(request, endpoint, transportOptions)); | ||||
| 	} | ||||
| 
 | ||||
| 	public Mono<BooleanResponse> exists(ExistsRequest request) { | ||||
| 
 | ||||
| 		Assert.notNull(request, "request must not be null"); | ||||
| 
 | ||||
| 		return Mono.fromFuture(transport.performRequestAsync(request, ExistsRequest._ENDPOINT, transportOptions)); | ||||
| 	} | ||||
| 
 | ||||
| 	public <T, P> Mono<UpdateResponse<T>> update(UpdateRequest<T, P> request, Class<T> clazz) { | ||||
| 
 | ||||
| 		Assert.notNull(request, "request must not be null"); | ||||
|  | ||||
| @ -25,6 +25,7 @@ import co.elastic.clients.elasticsearch.core.get.GetResult; | ||||
| 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 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch | ||||
| 		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<Publisher<BooleanResponse>>) client -> client.exists(existsRequest)))) | ||||
| 				.map(BooleanResponse::value) // | ||||
| 				.onErrorReturn(NoSuchIndexException.class, false); | ||||
| 	} | ||||
| 
 | ||||
| @ -171,7 +174,7 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch | ||||
| 		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<EntityAsMap>> getResponse = Mono | ||||
| 				.from(execute(client -> client.get(getRequest, EntityAsMap.class))); | ||||
|  | ||||
| @ -780,25 +780,26 @@ class RequestConverter { | ||||
| 		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 <T> MgetRequest documentMgetRequest(Query query, Class<T> clazz, IndexCoordinates index) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user