mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-08 13:12:10 +00:00
parent
9c80dc9ae8
commit
c9b8b1af19
@ -174,8 +174,8 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
|
||||
Assert.notNull(query, "query must not be null");
|
||||
|
||||
DeleteByQueryRequest request = requestConverter.documentDeleteByQueryRequest(query, clazz, index,
|
||||
getRefreshPolicy());
|
||||
DeleteByQueryRequest request = requestConverter.documentDeleteByQueryRequest(query, routingResolver.getRouting(),
|
||||
clazz, index, getRefreshPolicy());
|
||||
|
||||
DeleteByQueryResponse response = execute(client -> client.deleteByQuery(request));
|
||||
|
||||
@ -309,7 +309,8 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
Assert.notNull(query, "query must not be null");
|
||||
Assert.notNull(index, "index must not be null");
|
||||
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, clazz, index, true);
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, routingResolver.getRouting(), clazz, index,
|
||||
true);
|
||||
|
||||
SearchResponse<EntityAsMap> searchResponse = execute(client -> client.search(searchRequest, EntityAsMap.class));
|
||||
|
||||
@ -331,7 +332,8 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
}
|
||||
|
||||
protected <T> SearchHits<T> doSearch(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, clazz, index, false);
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, routingResolver.getRouting(), clazz, index,
|
||||
false);
|
||||
SearchResponse<EntityAsMap> searchResponse = execute(client -> client.search(searchRequest, EntityAsMap.class));
|
||||
|
||||
// noinspection DuplicatedCode
|
||||
@ -343,7 +345,7 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
}
|
||||
|
||||
protected <T> SearchHits<T> doSearch(SearchTemplateQuery query, Class<T> clazz, IndexCoordinates index) {
|
||||
var searchTemplateRequest = requestConverter.searchTemplate(query, index);
|
||||
var searchTemplateRequest = requestConverter.searchTemplate(query, routingResolver.getRouting(), index);
|
||||
var searchTemplateResponse = execute(client -> client.searchTemplate(searchTemplateRequest, EntityAsMap.class));
|
||||
|
||||
// noinspection DuplicatedCode
|
||||
@ -374,7 +376,8 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
Assert.notNull(query, "query must not be null");
|
||||
Assert.notNull(query.getPageable(), "pageable of query must not be null.");
|
||||
|
||||
SearchRequest request = requestConverter.searchRequest(query, clazz, index, false, scrollTimeInMillis);
|
||||
SearchRequest request = requestConverter.searchRequest(query, routingResolver.getRouting(), clazz, index, false,
|
||||
scrollTimeInMillis);
|
||||
SearchResponse<EntityAsMap> response = execute(client -> client.search(request, EntityAsMap.class));
|
||||
|
||||
return getSearchScrollHits(clazz, index, response);
|
||||
@ -492,7 +495,8 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
private List<SearchHits<?>> doMultiSearch(List<MultiSearchQueryParameter> multiSearchQueryParameters) {
|
||||
|
||||
MsearchRequest request = requestConverter.searchMsearchRequest(multiSearchQueryParameters);
|
||||
MsearchRequest request = requestConverter.searchMsearchRequest(multiSearchQueryParameters,
|
||||
routingResolver.getRouting());
|
||||
|
||||
MsearchResponse<EntityAsMap> msearchResponse = execute(client -> client.msearch(request, EntityAsMap.class));
|
||||
List<MultiSearchResponseItem<EntityAsMap>> responseItems = msearchResponse.responses();
|
||||
|
@ -111,8 +111,7 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
return Mono.just(entity) //
|
||||
.zipWith(//
|
||||
Mono.from(execute((ClientCallback<Publisher<IndexResponse>>) client -> client.index(indexRequest))) //
|
||||
.map(indexResponse -> new IndexResponseMetaData(
|
||||
indexResponse.id(), //
|
||||
.map(indexResponse -> new IndexResponseMetaData(indexResponse.id(), //
|
||||
indexResponse.index(), //
|
||||
indexResponse.seqNo(), //
|
||||
indexResponse.primaryTerm(), //
|
||||
@ -171,8 +170,8 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
|
||||
Assert.notNull(query, "query must not be null");
|
||||
|
||||
DeleteByQueryRequest request = requestConverter.documentDeleteByQueryRequest(query, entityType, index,
|
||||
getRefreshPolicy());
|
||||
DeleteByQueryRequest request = requestConverter.documentDeleteByQueryRequest(query, routingResolver.getRouting(),
|
||||
entityType, index, getRefreshPolicy());
|
||||
return Mono
|
||||
.from(execute((ClientCallback<Publisher<DeleteByQueryResponse>>) client -> client.deleteByQuery(request)))
|
||||
.map(responseConverter::byQueryResponse);
|
||||
@ -391,7 +390,8 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
|
||||
baseQuery.setPointInTime(new Query.PointInTime(psa.getPit(), pitKeepAlive));
|
||||
baseQuery.addSort(Sort.by("_shard_doc"));
|
||||
SearchRequest firstSearchRequest = requestConverter.searchRequest(baseQuery, clazz, index, false, true);
|
||||
SearchRequest firstSearchRequest = requestConverter.searchRequest(baseQuery, routingResolver.getRouting(),
|
||||
clazz, index, false, true);
|
||||
|
||||
return Mono.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client -> client
|
||||
.search(firstSearchRequest, EntityAsMap.class))).expand(entityAsMapSearchResponse -> {
|
||||
@ -404,7 +404,8 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
List<Object> sortOptions = hits.get(hits.size() - 1).sort().stream().map(TypeUtils::toObject)
|
||||
.collect(Collectors.toList());
|
||||
baseQuery.setSearchAfter(sortOptions);
|
||||
SearchRequest followSearchRequest = requestConverter.searchRequest(baseQuery, clazz, index, false, true);
|
||||
SearchRequest followSearchRequest = requestConverter.searchRequest(baseQuery,
|
||||
routingResolver.getRouting(), clazz, index, false, true);
|
||||
return Mono.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client -> client
|
||||
.search(followSearchRequest, EntityAsMap.class)));
|
||||
});
|
||||
@ -460,7 +461,8 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
Assert.notNull(query, "query must not be null");
|
||||
Assert.notNull(index, "index must not be null");
|
||||
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, entityType, index, true);
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, routingResolver.getRouting(), entityType, index,
|
||||
true);
|
||||
|
||||
return Mono
|
||||
.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client -> client.search(searchRequest,
|
||||
@ -470,7 +472,8 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
|
||||
private Flux<SearchDocument> doFindBounded(Query query, Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, clazz, index, false, false);
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, routingResolver.getRouting(), clazz, index,
|
||||
false, false);
|
||||
|
||||
return Mono
|
||||
.from(execute((ClientCallback<Publisher<ResponseBody<EntityAsMap>>>) client -> client.search(searchRequest,
|
||||
@ -481,7 +484,7 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
|
||||
private Flux<SearchDocument> doSearch(SearchTemplateQuery query, Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
var request = requestConverter.searchTemplate(query, index);
|
||||
var request = requestConverter.searchTemplate(query, routingResolver.getRouting(), index);
|
||||
|
||||
return Mono
|
||||
.from(execute((ClientCallback<Publisher<SearchTemplateResponse<EntityAsMap>>>) client -> client
|
||||
@ -496,7 +499,8 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
Assert.notNull(query, "query must not be null");
|
||||
Assert.notNull(index, "index must not be null");
|
||||
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, clazz, index, false);
|
||||
SearchRequest searchRequest = requestConverter.searchRequest(query, routingResolver.getRouting(), clazz, index,
|
||||
false);
|
||||
|
||||
// noinspection unchecked
|
||||
SearchDocumentCallback<T> callback = new ReadSearchDocumentCallback<>((Class<T>) clazz, index);
|
||||
|
@ -837,8 +837,8 @@ class RequestConverter {
|
||||
});
|
||||
}
|
||||
|
||||
public DeleteByQueryRequest documentDeleteByQueryRequest(Query query, Class<?> clazz, IndexCoordinates index,
|
||||
@Nullable RefreshPolicy refreshPolicy) {
|
||||
public DeleteByQueryRequest documentDeleteByQueryRequest(Query query, @Nullable String routing, Class<?> clazz,
|
||||
IndexCoordinates index, @Nullable RefreshPolicy refreshPolicy) {
|
||||
|
||||
Assert.notNull(query, "query must not be null");
|
||||
Assert.notNull(index, "index must not be null");
|
||||
@ -857,6 +857,8 @@ class RequestConverter {
|
||||
|
||||
if (query.getRoute() != null) {
|
||||
b.routing(query.getRoute());
|
||||
} else if (StringUtils.hasText(routing)) {
|
||||
b.routing(routing);
|
||||
}
|
||||
|
||||
return b;
|
||||
@ -998,23 +1000,24 @@ class RequestConverter {
|
||||
|
||||
// region search
|
||||
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable Class<T> clazz, IndexCoordinates indexCoordinates,
|
||||
boolean forCount) {
|
||||
return searchRequest(query, clazz, indexCoordinates, forCount, false, null);
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable String routing, @Nullable Class<T> clazz,
|
||||
IndexCoordinates indexCoordinates, boolean forCount) {
|
||||
return searchRequest(query, routing, clazz, indexCoordinates, forCount, false, null);
|
||||
}
|
||||
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable Class<T> clazz, IndexCoordinates indexCoordinates,
|
||||
boolean forCount, long scrollTimeInMillis) {
|
||||
return searchRequest(query, clazz, indexCoordinates, forCount, true, scrollTimeInMillis);
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable String routing, @Nullable Class<T> clazz,
|
||||
IndexCoordinates indexCoordinates, boolean forCount, long scrollTimeInMillis) {
|
||||
return searchRequest(query, routing, clazz, indexCoordinates, forCount, true, scrollTimeInMillis);
|
||||
}
|
||||
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable Class<T> clazz, IndexCoordinates indexCoordinates,
|
||||
boolean forCount, boolean forBatchedSearch) {
|
||||
return searchRequest(query, clazz, indexCoordinates, forCount, forBatchedSearch, null);
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable String routing, @Nullable Class<T> clazz,
|
||||
IndexCoordinates indexCoordinates, boolean forCount, boolean forBatchedSearch) {
|
||||
return searchRequest(query, routing, clazz, indexCoordinates, forCount, forBatchedSearch, null);
|
||||
}
|
||||
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable Class<T> clazz, IndexCoordinates indexCoordinates,
|
||||
boolean forCount, boolean forBatchedSearch, @Nullable Long scrollTimeInMillis) {
|
||||
public <T> SearchRequest searchRequest(Query query, @Nullable String routing, @Nullable Class<T> clazz,
|
||||
IndexCoordinates indexCoordinates, boolean forCount, boolean forBatchedSearch,
|
||||
@Nullable Long scrollTimeInMillis) {
|
||||
|
||||
String[] indexNames = indexCoordinates.getIndexNames();
|
||||
Assert.notNull(query, "query must not be null");
|
||||
@ -1022,7 +1025,7 @@ class RequestConverter {
|
||||
|
||||
elasticsearchConverter.updateQuery(query, clazz);
|
||||
SearchRequest.Builder builder = new SearchRequest.Builder();
|
||||
prepareSearchRequest(query, clazz, indexCoordinates, builder, forCount, forBatchedSearch);
|
||||
prepareSearchRequest(query, routing, clazz, indexCoordinates, builder, forCount, forBatchedSearch);
|
||||
|
||||
if (scrollTimeInMillis != null) {
|
||||
builder.scroll(t -> t.time(scrollTimeInMillis + "ms"));
|
||||
@ -1030,13 +1033,20 @@ class RequestConverter {
|
||||
|
||||
builder.query(getQuery(query, clazz));
|
||||
|
||||
if (StringUtils.hasText(query.getRoute())) {
|
||||
builder.routing(query.getRoute());
|
||||
}
|
||||
if (StringUtils.hasText(routing)) {
|
||||
builder.routing(routing);
|
||||
}
|
||||
|
||||
addFilter(query, builder);
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public MsearchRequest searchMsearchRequest(
|
||||
List<ElasticsearchTemplate.MultiSearchQueryParameter> multiSearchQueryParameters) {
|
||||
List<ElasticsearchTemplate.MultiSearchQueryParameter> multiSearchQueryParameters, @Nullable String routing) {
|
||||
|
||||
// basically the same stuff as in prepareSearchRequest, but the new Elasticsearch has different builders for a
|
||||
// normal search and msearch
|
||||
@ -1049,11 +1059,16 @@ class RequestConverter {
|
||||
.header(h -> {
|
||||
h //
|
||||
.index(Arrays.asList(param.index().getIndexNames())) //
|
||||
.routing(query.getRoute()) //
|
||||
.searchType(searchType(query.getSearchType())) //
|
||||
.requestCache(query.getRequestCache()) //
|
||||
;
|
||||
|
||||
if (StringUtils.hasText(query.getRoute())) {
|
||||
h.routing(query.getRoute());
|
||||
} else if (StringUtils.hasText(routing)) {
|
||||
h.routing(routing);
|
||||
}
|
||||
|
||||
if (query.getPreference() != null) {
|
||||
h.preference(query.getPreference());
|
||||
}
|
||||
@ -1156,8 +1171,8 @@ class RequestConverter {
|
||||
});
|
||||
}
|
||||
|
||||
private <T> void prepareSearchRequest(Query query, @Nullable Class<T> clazz, IndexCoordinates indexCoordinates,
|
||||
SearchRequest.Builder builder, boolean forCount, boolean forBatchedSearch) {
|
||||
private <T> void prepareSearchRequest(Query query, @Nullable String routing, @Nullable Class<T> clazz,
|
||||
IndexCoordinates indexCoordinates, SearchRequest.Builder builder, boolean forCount, boolean forBatchedSearch) {
|
||||
|
||||
String[] indexNames = indexCoordinates.getIndexNames();
|
||||
|
||||
@ -1190,6 +1205,8 @@ class RequestConverter {
|
||||
|
||||
if (query.getRoute() != null) {
|
||||
builder.routing(query.getRoute());
|
||||
} else if (StringUtils.hasText(routing)) {
|
||||
builder.routing(routing);
|
||||
}
|
||||
|
||||
if (query.getPreference() != null) {
|
||||
@ -1559,7 +1576,8 @@ class RequestConverter {
|
||||
return ClosePointInTimeRequest.of(cpit -> cpit.id(pit));
|
||||
}
|
||||
|
||||
public SearchTemplateRequest searchTemplate(SearchTemplateQuery query, IndexCoordinates index) {
|
||||
public SearchTemplateRequest searchTemplate(SearchTemplateQuery query, @Nullable String routing,
|
||||
IndexCoordinates index) {
|
||||
|
||||
Assert.notNull(query, "query must not be null");
|
||||
|
||||
@ -1570,10 +1588,15 @@ class RequestConverter {
|
||||
.id(query.getId()) //
|
||||
.index(Arrays.asList(index.getIndexNames())) //
|
||||
.preference(query.getPreference()) //
|
||||
.routing(query.getRoute()) //
|
||||
.searchType(searchType(query.getSearchType())).source(query.getSource()) //
|
||||
;
|
||||
|
||||
if (query.getRoute() != null) {
|
||||
builder.routing(query.getRoute());
|
||||
} else if (StringUtils.hasText(routing)) {
|
||||
builder.routing(routing);
|
||||
}
|
||||
|
||||
var expandWildcards = query.getExpandWildcards();
|
||||
if (!expandWildcards.isEmpty()) {
|
||||
builder.expandWildcards(expandWildcards(expandWildcards));
|
||||
|
@ -261,7 +261,8 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
|
||||
@Override
|
||||
public ByQueryResponse delete(Query query, Class<?> clazz, IndexCoordinates index) {
|
||||
DeleteByQueryRequest deleteByQueryRequest = requestFactory.deleteByQueryRequest(query, clazz, index);
|
||||
DeleteByQueryRequest deleteByQueryRequest = requestFactory.deleteByQueryRequest(query, routingResolver.getRouting(),
|
||||
clazz, index);
|
||||
return ResponseConverter
|
||||
.byQueryResponseOf(execute(client -> client.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT)));
|
||||
}
|
||||
@ -398,7 +399,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
|
||||
final Boolean trackTotalHits = query.getTrackTotalHits();
|
||||
query.setTrackTotalHits(true);
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, clazz, index);
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, routingResolver.getRouting(), clazz, index);
|
||||
query.setTrackTotalHits(trackTotalHits);
|
||||
|
||||
searchRequest.source().size(0);
|
||||
@ -409,7 +410,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
|
||||
@Override
|
||||
public <T> SearchHits<T> search(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, clazz, index);
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, routingResolver.getRouting(), clazz, index);
|
||||
SearchResponse response = execute(client -> client.search(searchRequest, RequestOptions.DEFAULT));
|
||||
|
||||
ReadDocumentCallback<T> documentCallback = new ReadDocumentCallback<>(elasticsearchConverter, clazz, index);
|
||||
@ -431,7 +432,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
|
||||
Assert.notNull(query.getPageable(), "pageable of query must not be null.");
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, clazz, index);
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, routingResolver.getRouting(), clazz, index);
|
||||
searchRequest.scroll(TimeValue.timeValueMillis(scrollTimeInMillis));
|
||||
|
||||
SearchResponse response = execute(client -> client.search(searchRequest, RequestOptions.DEFAULT));
|
||||
@ -477,7 +478,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
public <T> List<SearchHits<T>> multiSearch(List<? extends Query> queries, Class<T> clazz, IndexCoordinates index) {
|
||||
MultiSearchRequest request = new MultiSearchRequest();
|
||||
for (Query query : queries) {
|
||||
request.add(requestFactory.searchRequest(query, clazz, index));
|
||||
request.add(requestFactory.searchRequest(query, routingResolver.getRouting(), clazz, index));
|
||||
}
|
||||
|
||||
MultiSearchResponse.Item[] items = getMultiSearchResult(request);
|
||||
@ -504,7 +505,8 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
Iterator<Class<?>> it = classes.iterator();
|
||||
for (Query query : queries) {
|
||||
Class<?> clazz = it.next();
|
||||
request.add(requestFactory.searchRequest(query, clazz, getIndexCoordinatesFor(clazz)));
|
||||
request
|
||||
.add(requestFactory.searchRequest(query, routingResolver.getRouting(), clazz, getIndexCoordinatesFor(clazz)));
|
||||
}
|
||||
|
||||
MultiSearchResponse.Item[] items = getMultiSearchResult(request);
|
||||
@ -538,7 +540,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
MultiSearchRequest request = new MultiSearchRequest();
|
||||
Iterator<Class<?>> it = classes.iterator();
|
||||
for (Query query : queries) {
|
||||
request.add(requestFactory.searchRequest(query, it.next(), index));
|
||||
request.add(requestFactory.searchRequest(query, routingResolver.getRouting(), it.next(), index));
|
||||
}
|
||||
|
||||
MultiSearchResponse.Item[] items = getMultiSearchResult(request);
|
||||
@ -572,7 +574,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
Iterator<Class<?>> it = classes.iterator();
|
||||
Iterator<IndexCoordinates> indexesIt = indexes.iterator();
|
||||
for (Query query : queries) {
|
||||
request.add(requestFactory.searchRequest(query, it.next(), indexesIt.next()));
|
||||
request.add(requestFactory.searchRequest(query, routingResolver.getRouting(), it.next(), indexesIt.next()));
|
||||
}
|
||||
|
||||
MultiSearchResponse.Item[] items = getMultiSearchResult(request);
|
||||
|
@ -374,7 +374,8 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
protected Mono<BulkByScrollResponse> doDeleteBy(Query query, Class<?> entityType, IndexCoordinates index) {
|
||||
|
||||
return Mono.defer(() -> {
|
||||
DeleteByQueryRequest request = requestFactory.deleteByQueryRequest(query, entityType, index);
|
||||
DeleteByQueryRequest request = requestFactory.deleteByQueryRequest(query, routingResolver.getRouting(),
|
||||
entityType, index);
|
||||
return doDeleteBy(prepareDeleteByRequest(request));
|
||||
});
|
||||
}
|
||||
@ -505,7 +506,7 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
|
||||
return Flux.defer(() -> {
|
||||
|
||||
SearchRequest request = requestFactory.searchRequest(query, clazz, index);
|
||||
SearchRequest request = requestFactory.searchRequest(query, routingResolver.getRouting(), clazz, index);
|
||||
boolean useScroll = !(query.getPageable().isPaged() || query.isLimiting());
|
||||
request = prepareSearchRequest(request, useScroll);
|
||||
|
||||
@ -520,7 +521,7 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
protected <T> Mono<SearchDocumentResponse> doFindForResponse(Query query, Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
return Mono.defer(() -> {
|
||||
SearchRequest request = requestFactory.searchRequest(query, clazz, index);
|
||||
SearchRequest request = requestFactory.searchRequest(query, routingResolver.getRouting(), clazz, index);
|
||||
request = prepareSearchRequest(request, false);
|
||||
|
||||
SearchDocumentCallback<?> documentCallback = new ReadSearchDocumentCallback<>(clazz, index);
|
||||
@ -540,7 +541,7 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
Assert.notNull(index, "index must not be null");
|
||||
|
||||
return Flux.defer(() -> {
|
||||
SearchRequest request = requestFactory.searchRequest(query, entityType, index);
|
||||
SearchRequest request = requestFactory.searchRequest(query, routingResolver.getRouting(), entityType, index);
|
||||
request = prepareSearchRequest(request, false);
|
||||
return doAggregate(request);
|
||||
});
|
||||
@ -565,7 +566,7 @@ public class ReactiveElasticsearchTemplate extends AbstractReactiveElasticsearch
|
||||
protected Mono<Long> doCount(Query query, Class<?> entityType, IndexCoordinates index) {
|
||||
return Mono.defer(() -> {
|
||||
|
||||
SearchRequest request = requestFactory.searchRequest(query, entityType, index);
|
||||
SearchRequest request = requestFactory.searchRequest(query, routingResolver.getRouting(), entityType, index);
|
||||
request = prepareSearchRequest(request, false);
|
||||
return doCount(request);
|
||||
});
|
||||
|
@ -525,8 +525,8 @@ class RequestFactory {
|
||||
// endregion
|
||||
|
||||
// region delete
|
||||
public DeleteByQueryRequest deleteByQueryRequest(Query query, Class<?> clazz, IndexCoordinates index) {
|
||||
SearchRequest searchRequest = searchRequest(query, clazz, index);
|
||||
public DeleteByQueryRequest deleteByQueryRequest(Query query, @Nullable String routing, Class<?> clazz, IndexCoordinates index) {
|
||||
SearchRequest searchRequest = searchRequest(query, routing, clazz, index);
|
||||
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(index.getIndexNames()) //
|
||||
.setQuery(searchRequest.source().query()) //
|
||||
.setAbortOnVersionConflict(false) //
|
||||
@ -544,6 +544,8 @@ class RequestFactory {
|
||||
|
||||
if (query.getRoute() != null) {
|
||||
deleteByQueryRequest.setRouting(query.getRoute());
|
||||
} else if (StringUtils.hasText(routing)) {
|
||||
deleteByQueryRequest.setRouting(routing);
|
||||
}
|
||||
|
||||
return deleteByQueryRequest;
|
||||
@ -751,10 +753,10 @@ class RequestFactory {
|
||||
return searchRequest;
|
||||
}
|
||||
|
||||
public SearchRequest searchRequest(Query query, @Nullable Class<?> clazz, IndexCoordinates index) {
|
||||
public SearchRequest searchRequest(Query query, @Nullable String routing, @Nullable Class<?> clazz, IndexCoordinates index) {
|
||||
|
||||
elasticsearchConverter.updateQuery(query, clazz);
|
||||
SearchRequest searchRequest = prepareSearchRequest(query, clazz, index);
|
||||
SearchRequest searchRequest = prepareSearchRequest(query, routing,clazz, index);
|
||||
QueryBuilder elasticsearchQuery = getQuery(query);
|
||||
QueryBuilder elasticsearchFilter = getFilter(query);
|
||||
|
||||
@ -768,7 +770,7 @@ class RequestFactory {
|
||||
|
||||
}
|
||||
|
||||
private SearchRequest prepareSearchRequest(Query query, @Nullable Class<?> clazz, IndexCoordinates indexCoordinates) {
|
||||
private SearchRequest prepareSearchRequest(Query query, @Nullable String routing, @Nullable Class<?> clazz, IndexCoordinates indexCoordinates) {
|
||||
|
||||
String[] indexNames = indexCoordinates.getIndexNames();
|
||||
Assert.notNull(indexNames, "No index defined for Query");
|
||||
@ -843,6 +845,8 @@ class RequestFactory {
|
||||
|
||||
if (StringUtils.hasLength(query.getRoute())) {
|
||||
request.routing(query.getRoute());
|
||||
} else if (StringUtils.hasText(routing)) {
|
||||
request.routing(routing);
|
||||
}
|
||||
|
||||
Duration timeout = query.getTimeout();
|
||||
|
@ -40,7 +40,7 @@ public class ElasticsearchPartQueryELCIntegrationTests extends ElasticsearchPart
|
||||
|
||||
JacksonJsonpMapper jsonpMapper = new JacksonJsonpMapper();
|
||||
RequestConverter requestConverter = new RequestConverter(operations.getElasticsearchConverter(), jsonpMapper);
|
||||
SearchRequest request = requestConverter.searchRequest(query, clazz, IndexCoordinates.of("dummy"), false);
|
||||
SearchRequest request = requestConverter.searchRequest(query, null, clazz, IndexCoordinates.of("dummy"), false);
|
||||
|
||||
return JsonUtils.toJson(request, jsonpMapper);
|
||||
// return "{\"query\":" + JsonUtils.toJson(request.query(), jsonpMapper) + "}";
|
||||
|
@ -62,7 +62,7 @@ class RequestConverterTest {
|
||||
.withDocValueFields(docValueFields) //
|
||||
.build();
|
||||
|
||||
var searchRequest = requestConverter.searchRequest(query, SampleEntity.class, IndexCoordinates.of("foo"), true);
|
||||
var searchRequest = requestConverter.searchRequest(query,null, SampleEntity.class, IndexCoordinates.of("foo"), true);
|
||||
|
||||
var fieldAndFormats = searchRequest.docvalueFields();
|
||||
assertThat(fieldAndFormats).hasSize(2);
|
||||
|
@ -40,7 +40,7 @@ public class ElasticsearchPartQueryERHLCIntegrationTests extends ElasticsearchPa
|
||||
|
||||
protected String buildQueryString(Query query, Class<?> clazz) {
|
||||
SearchSourceBuilder source = new RequestFactory(operations.getElasticsearchConverter())
|
||||
.searchRequest(query, clazz, IndexCoordinates.of("dummy")).source();
|
||||
.searchRequest(query, null, clazz, IndexCoordinates.of("dummy")).source();
|
||||
// remove defaultboost values
|
||||
return source.toString().replaceAll("(\\^\\d+\\.\\d+)", "");
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ class RequestFactoryTests {
|
||||
.build();
|
||||
|
||||
// when
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, IndexCoordinates.of("test"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, null, IndexCoordinates.of("test"));
|
||||
|
||||
// then
|
||||
assertThat(searchRequest.source().from()).isEqualTo(30);
|
||||
@ -218,21 +218,35 @@ class RequestFactoryTests {
|
||||
" ]" + //
|
||||
'}';
|
||||
|
||||
String searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons")).source()
|
||||
.toString();
|
||||
String searchRequest = requestFactory.searchRequest(query, null, Person.class, IndexCoordinates.of("persons"))
|
||||
.source().toString();
|
||||
|
||||
assertEquals(expected, searchRequest, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
// DATAES-449
|
||||
void shouldAddRouting() {
|
||||
void shouldAddRoutingFromQuery() {
|
||||
String route = "route66";
|
||||
CriteriaQuery query = new CriteriaQuery(new Criteria("lastName").is("Smith"));
|
||||
query.setRoute(route);
|
||||
converter.updateQuery(query, Person.class);
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.routing()).isEqualTo(route);
|
||||
}
|
||||
|
||||
@Test
|
||||
// #2087
|
||||
void shouldAddRoutingFromRouting() {
|
||||
String route = "route66";
|
||||
CriteriaQuery query = new CriteriaQuery(new Criteria("lastName").is("Smith"));
|
||||
converter.updateQuery(query, Person.class);
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, route, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.routing()).isEqualTo(route);
|
||||
}
|
||||
@ -242,7 +256,8 @@ class RequestFactoryTests {
|
||||
void shouldAddMaxQueryWindowForUnpagedToRequest() {
|
||||
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withPageable(Pageable.unpaged()).build();
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.source().from()).isEqualTo(0);
|
||||
assertThat(searchRequest.source().size()).isEqualTo(RequestFactory.INDEX_MAX_RESULT_WINDOW);
|
||||
@ -267,7 +282,7 @@ class RequestFactoryTests {
|
||||
void shouldNotRequestSeqNoAndPrimaryTermWhenEntityClassDoesNotContainSeqNoPrimaryTermProperty() {
|
||||
Query query = new NativeSearchQueryBuilder().build();
|
||||
|
||||
SearchRequest request = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest request = requestFactory.searchRequest(query, null, Person.class, IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(request.source().seqNoAndPrimaryTerm()).isNull();
|
||||
}
|
||||
@ -277,7 +292,7 @@ class RequestFactoryTests {
|
||||
void shouldRequestSeqNoAndPrimaryTermWhenEntityClassContainsSeqNoPrimaryTermProperty() {
|
||||
Query query = new NativeSearchQueryBuilder().build();
|
||||
|
||||
SearchRequest request = requestFactory.searchRequest(query, EntityWithSeqNoPrimaryTerm.class,
|
||||
SearchRequest request = requestFactory.searchRequest(query, null, EntityWithSeqNoPrimaryTerm.class,
|
||||
IndexCoordinates.of("seqNoPrimaryTerm"));
|
||||
|
||||
assertThat(request.source().seqNoAndPrimaryTerm()).isTrue();
|
||||
@ -288,7 +303,7 @@ class RequestFactoryTests {
|
||||
void shouldNotRequestSeqNoAndPrimaryTermWhenEntityClassIsNull() {
|
||||
Query query = new NativeSearchQueryBuilder().build();
|
||||
|
||||
SearchRequest request = requestFactory.searchRequest(query, null, IndexCoordinates.of("persons"));
|
||||
SearchRequest request = requestFactory.searchRequest(query, null, null, IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(request.source().seqNoAndPrimaryTerm()).isNull();
|
||||
}
|
||||
@ -516,7 +531,8 @@ class RequestFactoryTests {
|
||||
void shouldSetTimeoutToRequest() {
|
||||
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withTimeout(Duration.ofSeconds(1)).build();
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.source().timeout().getMillis()).isEqualTo(Duration.ofSeconds(1).toMillis());
|
||||
}
|
||||
@ -622,8 +638,8 @@ class RequestFactoryTests {
|
||||
]
|
||||
}""";
|
||||
|
||||
String searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons")).source()
|
||||
.toString();
|
||||
String searchRequest = requestFactory.searchRequest(query, null, Person.class, IndexCoordinates.of("persons"))
|
||||
.source().toString();
|
||||
|
||||
assertEquals(expected, searchRequest, false);
|
||||
}
|
||||
@ -634,7 +650,8 @@ class RequestFactoryTests {
|
||||
|
||||
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.requestCache()).isNull();
|
||||
}
|
||||
@ -646,7 +663,8 @@ class RequestFactoryTests {
|
||||
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
query.setRequestCache(true);
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.requestCache()).isTrue();
|
||||
}
|
||||
@ -658,7 +676,8 @@ class RequestFactoryTests {
|
||||
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
query.setRequestCache(false);
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.requestCache()).isFalse();
|
||||
}
|
||||
@ -670,7 +689,8 @@ class RequestFactoryTests {
|
||||
Query query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withStoredFields("lastName", "location")
|
||||
.build();
|
||||
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, Person.class, IndexCoordinates.of("persons"));
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, null, Person.class,
|
||||
IndexCoordinates.of("persons"));
|
||||
|
||||
assertThat(searchRequest.source().storedFields()).isNotNull();
|
||||
assertThat(searchRequest.source().storedFields().fieldNames())
|
||||
|
Loading…
x
Reference in New Issue
Block a user