mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-05-31 09:12:11 +00:00
DATAES-875 - MappingElasticsearchConverter.updateQuery not called at all places.
Original PR: #489
This commit is contained in:
parent
ea98ef4533
commit
3782c8e738
@ -171,7 +171,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
Assert.notNull(index, "index must not be null");
|
||||
Assert.notEmpty(query.getIds(), "No Id define for Query");
|
||||
|
||||
MultiGetRequest request = requestFactory.multiGetRequest(query, index);
|
||||
MultiGetRequest request = requestFactory.multiGetRequest(query, clazz, index);
|
||||
MultiGetResponse result = execute(client -> client.mget(request, RequestOptions.DEFAULT));
|
||||
|
||||
DocumentCallback<T> callback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index);
|
||||
|
@ -186,7 +186,7 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
Assert.notNull(index, "index must not be null");
|
||||
Assert.notEmpty(query.getIds(), "No Ids defined for Query");
|
||||
|
||||
MultiGetRequestBuilder builder = requestFactory.multiGetRequestBuilder(client, query, index);
|
||||
MultiGetRequestBuilder builder = requestFactory.multiGetRequestBuilder(client, query, clazz, index);
|
||||
|
||||
DocumentCallback<T> callback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index);
|
||||
List<Document> documents = DocumentAdapters.from(builder.execute().actionGet());
|
||||
|
@ -69,7 +69,6 @@ import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersiste
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.mapping.SimpleElasticsearchMappingContext;
|
||||
import org.springframework.data.elasticsearch.core.query.BulkOptions;
|
||||
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.Query;
|
||||
import org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm;
|
||||
@ -267,7 +266,7 @@ public class ReactiveElasticsearchTemplate implements ReactiveElasticsearchOpera
|
||||
|
||||
DocumentCallback<T> callback = new ReadDocumentCallback<>(converter, clazz, index);
|
||||
|
||||
MultiGetRequest request = requestFactory.multiGetRequest(query, index);
|
||||
MultiGetRequest request = requestFactory.multiGetRequest(query, clazz, index);
|
||||
return Flux.from(execute(client -> client.multiGet(request))) //
|
||||
.concatMap(result -> callback.doWith(DocumentAdapters.from(result)));
|
||||
}
|
||||
@ -617,10 +616,6 @@ public class ReactiveElasticsearchTemplate implements ReactiveElasticsearchOpera
|
||||
|
||||
private Flux<SearchDocument> doFind(Query query, Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
if (query instanceof CriteriaQuery) {
|
||||
converter.updateQuery((CriteriaQuery) query, clazz);
|
||||
}
|
||||
|
||||
return Flux.defer(() -> {
|
||||
SearchRequest request = requestFactory.searchRequest(query, clazz, index);
|
||||
request = prepareSearchRequest(request);
|
||||
|
@ -21,7 +21,6 @@ import static org.springframework.util.CollectionUtils.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
@ -60,7 +59,6 @@ import org.elasticsearch.client.indices.GetIndexRequest;
|
||||
import org.elasticsearch.client.indices.GetMappingsRequest;
|
||||
import org.elasticsearch.client.indices.PutMappingRequest;
|
||||
import org.elasticsearch.cluster.metadata.AliasMetadata;
|
||||
import org.elasticsearch.common.collect.ImmutableOpenMap;
|
||||
import org.elasticsearch.common.compress.CompressedXContent;
|
||||
import org.elasticsearch.common.geo.GeoDistance;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
@ -192,12 +190,7 @@ class RequestFactory {
|
||||
Query filterQuery = parameters.getFilterQuery();
|
||||
|
||||
if (filterQuery != null) {
|
||||
|
||||
if (filterQuery instanceof CriteriaQuery && parameters.getFilterQueryClass() != null) {
|
||||
CriteriaQuery query = (CriteriaQuery) filterQuery;
|
||||
elasticsearchConverter.updateQuery(query, parameters.getFilterQueryClass());
|
||||
}
|
||||
|
||||
elasticsearchConverter.updateQuery(filterQuery, parameters.getFilterQueryClass());
|
||||
QueryBuilder queryBuilder = getFilter(filterQuery);
|
||||
|
||||
if (queryBuilder == null) {
|
||||
@ -343,7 +336,6 @@ class RequestFactory {
|
||||
* @param settings optional settings
|
||||
* @return request
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public CreateIndexRequest createIndexRequest(IndexCoordinates index, @Nullable Document settings) {
|
||||
CreateIndexRequest request = new CreateIndexRequest(index.getIndexName());
|
||||
|
||||
@ -481,21 +473,6 @@ class RequestFactory {
|
||||
return new org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequest().indices(indexNames);
|
||||
}
|
||||
|
||||
public Map<String, Set<AliasData>> convertAliasesResponse(
|
||||
ImmutableOpenMap<String, List<AliasMetadata>> aliasesResponse) {
|
||||
|
||||
Map<String, Set<AliasMetadata>> mapped = new LinkedHashMap<>();
|
||||
Iterator<String> keysIt = aliasesResponse.keysIt();
|
||||
while (keysIt.hasNext()) {
|
||||
String key = keysIt.next();
|
||||
|
||||
List<AliasMetadata> aliasMetaData = aliasesResponse.get(key);
|
||||
mapped.put(key, new LinkedHashSet<>(aliasMetaData));
|
||||
}
|
||||
|
||||
return convertAliasesResponse(mapped);
|
||||
}
|
||||
|
||||
public Map<String, Set<AliasData>> convertAliasesResponse(Map<String, Set<AliasMetadata>> aliasesResponse) {
|
||||
Map<String, Set<AliasData>> converted = new LinkedHashMap<>();
|
||||
aliasesResponse.forEach((index, aliasMetaDataSet) -> {
|
||||
@ -622,19 +599,24 @@ class RequestFactory {
|
||||
return client.prepareGet(index.getIndexName(), null, id);
|
||||
}
|
||||
|
||||
public MultiGetRequest multiGetRequest(Query query, IndexCoordinates index) {
|
||||
public MultiGetRequest multiGetRequest(Query query, Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
MultiGetRequest multiGetRequest = new MultiGetRequest();
|
||||
getMultiRequestItems(query, index).forEach(multiGetRequest::add);
|
||||
getMultiRequestItems(query, clazz, index).forEach(multiGetRequest::add);
|
||||
return multiGetRequest;
|
||||
}
|
||||
|
||||
public MultiGetRequestBuilder multiGetRequestBuilder(Client client, Query searchQuery, IndexCoordinates index) {
|
||||
public MultiGetRequestBuilder multiGetRequestBuilder(Client client, Query searchQuery, Class<?> clazz,
|
||||
IndexCoordinates index) {
|
||||
|
||||
MultiGetRequestBuilder multiGetRequestBuilder = client.prepareMultiGet();
|
||||
getMultiRequestItems(searchQuery, index).forEach(multiGetRequestBuilder::add);
|
||||
getMultiRequestItems(searchQuery, clazz, index).forEach(multiGetRequestBuilder::add);
|
||||
return multiGetRequestBuilder;
|
||||
}
|
||||
|
||||
private List<MultiGetRequest.Item> getMultiRequestItems(Query searchQuery, IndexCoordinates index) {
|
||||
private List<MultiGetRequest.Item> getMultiRequestItems(Query searchQuery, Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
elasticsearchConverter.updateQuery(searchQuery, clazz);
|
||||
List<MultiGetRequest.Item> items = new ArrayList<>();
|
||||
|
||||
if (!isEmpty(searchQuery.getFields())) {
|
||||
@ -830,6 +812,7 @@ class RequestFactory {
|
||||
|
||||
public SearchRequest searchRequest(Query query, @Nullable Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
elasticsearchConverter.updateQuery(query, clazz);
|
||||
SearchRequest searchRequest = prepareSearchRequest(query, clazz, index);
|
||||
QueryBuilder elasticsearchQuery = getQuery(query);
|
||||
QueryBuilder elasticsearchFilter = getFilter(query);
|
||||
@ -851,6 +834,7 @@ class RequestFactory {
|
||||
public SearchRequestBuilder searchRequestBuilder(Client client, Query query, @Nullable Class<?> clazz,
|
||||
IndexCoordinates index) {
|
||||
|
||||
elasticsearchConverter.updateQuery(query, clazz);
|
||||
SearchRequestBuilder searchRequestBuilder = prepareSearchRequestBuilder(query, client, clazz, index);
|
||||
QueryBuilder elasticsearchQuery = getQuery(query);
|
||||
QueryBuilder elasticsearchFilter = getFilter(query);
|
||||
|
@ -20,6 +20,7 @@ import org.springframework.data.elasticsearch.core.document.Document;
|
||||
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity;
|
||||
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty;
|
||||
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.Query;
|
||||
import org.springframework.data.projection.ProjectionFactory;
|
||||
import org.springframework.data.projection.SpelAwareProxyProjectionFactory;
|
||||
import org.springframework.lang.Nullable;
|
||||
@ -83,15 +84,34 @@ public interface ElasticsearchConverter
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region query
|
||||
/**
|
||||
* Updates a query by renaming the property names in the query to the correct mapped field names and the values to the
|
||||
* converted values if the {@link ElasticsearchPersistentProperty} for a property has a
|
||||
* {@link org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentPropertyConverter}.
|
||||
* {@link org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentPropertyConverter}. If
|
||||
* domainClass is null, it's a noop; handling null here eliminates null checks in the caller.
|
||||
*
|
||||
* @param query the query that is internally updated
|
||||
* @param domainClass the class of the object that is searched with the query
|
||||
*/
|
||||
default void updateQuery(Query query, @Nullable Class<?> domainClass) {
|
||||
|
||||
if (domainClass != null) {
|
||||
|
||||
if (query instanceof CriteriaQuery) {
|
||||
updateCriteriaQuery((CriteriaQuery) query, domainClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a {@link CriteriaQuery} by renaming the property names in the query to the correct mapped field names and
|
||||
* the values to the converted values if the {@link ElasticsearchPersistentProperty} for a property has a
|
||||
* {@link org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentPropertyConverter}.
|
||||
*
|
||||
* @param criteriaQuery the query that is internally updated
|
||||
* @param domainClass the class of the object that is searched with the query
|
||||
*/
|
||||
// region query
|
||||
void updateQuery(CriteriaQuery criteriaQuery, Class<?> domainClass);
|
||||
void updateCriteriaQuery(CriteriaQuery criteriaQuery, Class<?> domainClass);
|
||||
// endregion
|
||||
}
|
||||
|
@ -748,7 +748,7 @@ public class MappingElasticsearchConverter
|
||||
|
||||
// region queries
|
||||
@Override
|
||||
public void updateQuery(CriteriaQuery criteriaQuery, Class<?> domainClass) {
|
||||
public void updateCriteriaQuery(CriteriaQuery criteriaQuery, Class<?> domainClass) {
|
||||
ElasticsearchPersistentEntity<?> persistentEntity = mappingContext.getPersistentEntity(domainClass);
|
||||
|
||||
if (persistentEntity != null) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user