mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-22 12:02:10 +00:00
DATAES-713 - Add returned aggregations from the AggregatedPage to the SearchHits.
Original PR: #365
This commit is contained in:
parent
b634f318ab
commit
d2b7df87f4
@ -19,7 +19,6 @@ import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.data.elasticsearch.ElasticsearchException;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.convert.ElasticsearchConverter;
|
||||
import org.springframework.data.elasticsearch.core.convert.MappingElasticsearchConverter;
|
||||
import org.springframework.data.elasticsearch.core.document.SearchDocumentResponse;
|
||||
@ -108,57 +107,47 @@ public abstract class AbstractElasticsearchTemplate implements ElasticsearchOper
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> AggregatedPage<SearchHit<T>> search(MoreLikeThisQuery query, Class<T> clazz, IndexCoordinates index) {
|
||||
public <T> SearchHits<T> search(MoreLikeThisQuery query, Class<T> clazz, IndexCoordinates index) {
|
||||
|
||||
Assert.notNull(query.getId(), "No document id defined for MoreLikeThisQuery");
|
||||
|
||||
MoreLikeThisQueryBuilder moreLikeThisQueryBuilder = requestFactory.moreLikeThisQueryBuilder(query, index);
|
||||
|
||||
return searchForPage(new NativeSearchQueryBuilder().withQuery(moreLikeThisQueryBuilder).build(), clazz, index);
|
||||
return search(new NativeSearchQueryBuilder().withQuery(moreLikeThisQueryBuilder).build(), clazz, index);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> List<AggregatedPage<SearchHit<T>>> multiSearchForPage(List<? extends Query> queries, Class<T> clazz,
|
||||
IndexCoordinates index) {
|
||||
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));
|
||||
}
|
||||
return doMultiSearch(queries, clazz, request);
|
||||
|
||||
MultiSearchResponse.Item[] items = getMultiSearchResult(request);
|
||||
|
||||
List<SearchHits<T>> res = new ArrayList<>(queries.size());
|
||||
int c = 0;
|
||||
for (Query query : queries) {
|
||||
res.add(elasticsearchConverter.read(clazz, SearchDocumentResponse.from(items[c++].getResponse())));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AggregatedPage<? extends SearchHit<?>>> multiSearchForPage(List<? extends Query> queries,
|
||||
List<Class<?>> classes, IndexCoordinates index) {
|
||||
public List<SearchHits<?>> multiSearch(List<? extends Query> queries, List<Class<?>> classes,
|
||||
IndexCoordinates index) {
|
||||
MultiSearchRequest request = new MultiSearchRequest();
|
||||
Iterator<Class<?>> it = classes.iterator();
|
||||
for (Query query : queries) {
|
||||
request.add(requestFactory.searchRequest(query, it.next(), index));
|
||||
}
|
||||
return doMultiSearch(queries, classes, request);
|
||||
}
|
||||
|
||||
private <T> List<AggregatedPage<SearchHit<T>>> doMultiSearch(List<? extends Query> queries, Class<T> clazz,
|
||||
MultiSearchRequest request) {
|
||||
MultiSearchResponse.Item[] items = getMultiSearchResult(request);
|
||||
List<AggregatedPage<SearchHit<T>>> res = new ArrayList<>(queries.size());
|
||||
int c = 0;
|
||||
for (Query query : queries) {
|
||||
res.add(elasticsearchConverter.mapResults(SearchDocumentResponse.from(items[c++].getResponse()), clazz,
|
||||
query.getPageable()));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private List<AggregatedPage<? extends SearchHit<?>>> doMultiSearch(List<? extends Query> queries,
|
||||
List<Class<?>> classes, MultiSearchRequest request) {
|
||||
MultiSearchResponse.Item[] items = getMultiSearchResult(request);
|
||||
List<AggregatedPage<? extends SearchHit<?>>> res = new ArrayList<>(queries.size());
|
||||
List<SearchHits<?>> res = new ArrayList<>(queries.size());
|
||||
int c = 0;
|
||||
Iterator<Class<?>> it = classes.iterator();
|
||||
Iterator<Class<?>> it1 = classes.iterator();
|
||||
for (Query query : queries) {
|
||||
res.add(elasticsearchConverter.mapResults(SearchDocumentResponse.from(items[c++].getResponse()), it.next(),
|
||||
query.getPageable()));
|
||||
res.add(elasticsearchConverter.read(it1.next(), SearchDocumentResponse.from(items[c++].getResponse())));
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
@ -226,19 +226,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T query(Query query, ResultsExtractor<T> resultsExtractor, @Nullable Class<T> clazz,
|
||||
IndexCoordinates index) {
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, clazz, index);
|
||||
try {
|
||||
SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);
|
||||
return resultsExtractor.extract(result);
|
||||
} catch (IOException e) {
|
||||
throw new ElasticsearchException("Error for search request: " + searchRequest.toString(), e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> AggregatedPage<SearchHit<T>> searchForPage(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
public <T> SearchHits<T> search(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
SearchRequest searchRequest = requestFactory.searchRequest(query, clazz, index);
|
||||
SearchResponse response;
|
||||
try {
|
||||
@ -246,7 +234,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate {
|
||||
} catch (IOException e) {
|
||||
throw new ElasticsearchException("Error for search request: " + searchRequest.toString(), e);
|
||||
}
|
||||
return elasticsearchConverter.mapResults(SearchDocumentResponse.from(response), clazz, query.getPageable());
|
||||
return elasticsearchConverter.read(clazz, SearchDocumentResponse.from(response));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -196,17 +196,10 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T query(Query query, ResultsExtractor<T> resultsExtractor, Class<T> clazz, IndexCoordinates index) {
|
||||
public <T> SearchHits<T> search(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
SearchRequestBuilder searchRequestBuilder = requestFactory.searchRequestBuilder(client, query, clazz, index);
|
||||
SearchResponse response = getSearchResponse(searchRequestBuilder);
|
||||
return resultsExtractor.extract(response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> AggregatedPage<SearchHit<T>> searchForPage(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
SearchRequestBuilder searchRequestBuilder = requestFactory.searchRequestBuilder(client, query, clazz, index);
|
||||
SearchResponse response = getSearchResponse(searchRequestBuilder);
|
||||
return elasticsearchConverter.mapResults(SearchDocumentResponse.from(response), clazz, query.getPageable());
|
||||
return elasticsearchConverter.read(clazz, SearchDocumentResponse.from(response));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -22,7 +22,9 @@ import org.springframework.data.domain.Page;
|
||||
*
|
||||
* @param <T>
|
||||
* @author Sascha Woo
|
||||
* @deprecated since 4.0, use {@link org.springframework.data.elasticsearch.core.SearchHits} to return values.
|
||||
*/
|
||||
@Deprecated
|
||||
public interface ScoredPage<T> extends Page<T> {
|
||||
|
||||
float getMaxScore();
|
||||
|
@ -21,6 +21,7 @@ import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
|
||||
|
||||
@ -81,4 +82,16 @@ public final class SearchHitSupport {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds an {@link AggregatedPage} with the {@link SearchHit} objects from a {@link SearchHits} object.
|
||||
*
|
||||
* @param searchHits, must not be {@literal null}.
|
||||
* @param pageable, must not be {@literal null}.
|
||||
* @return the created Page
|
||||
*/
|
||||
public static <T> AggregatedPage<SearchHit<T>> page(SearchHits<T> searchHits, Pageable pageable) {
|
||||
return new AggregatedPageImpl<>(searchHits.getSearchHits(), pageable, searchHits.getTotalHits(),
|
||||
searchHits.getAggregations(), searchHits.getScrollId(), searchHits.getMaxScore());
|
||||
}
|
||||
}
|
||||
|
@ -18,9 +18,10 @@ package org.springframework.data.elasticsearch.core;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.elasticsearch.search.aggregations.Aggregations;
|
||||
import org.springframework.data.util.Streamable;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@ -33,22 +34,28 @@ import org.springframework.util.StringUtils;
|
||||
*/
|
||||
public class SearchHits<T> implements Streamable<SearchHit<T>> {
|
||||
|
||||
private final List<? extends SearchHit<T>> searchHits;
|
||||
private final long totalHits;
|
||||
private final float maxScore;
|
||||
private final String scrollId;
|
||||
private final List<? extends SearchHit<T>> searchHits;
|
||||
private final Aggregations aggregations;
|
||||
|
||||
/**
|
||||
* @param searchHits must not be {@literal null}
|
||||
* @param totalHits
|
||||
* @param maxScore
|
||||
* @param searchHits must not be {@literal null}
|
||||
* @param aggregations
|
||||
*/
|
||||
public SearchHits(List<? extends SearchHit<T>> searchHits, long totalHits, float maxScore) {
|
||||
this.totalHits = totalHits;
|
||||
this.maxScore = maxScore;
|
||||
public SearchHits(long totalHits, float maxScore, @Nullable String scrollId, List<? extends SearchHit<T>> searchHits,
|
||||
@Nullable Aggregations aggregations) {
|
||||
|
||||
Assert.notNull(searchHits, "searchHits must not be null");
|
||||
|
||||
this.totalHits = totalHits;
|
||||
this.maxScore = maxScore;
|
||||
this.scrollId = scrollId;
|
||||
this.searchHits = searchHits;
|
||||
this.aggregations = aggregations;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -56,21 +63,35 @@ public class SearchHits<T> implements Streamable<SearchHit<T>> {
|
||||
return (Iterator<SearchHit<T>>) searchHits.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the number of total hits.
|
||||
*/
|
||||
// region getter
|
||||
public long getTotalHits() {
|
||||
return totalHits;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the maximum score
|
||||
*/
|
||||
public float getMaxScore() {
|
||||
return maxScore;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the scroll id
|
||||
*/
|
||||
@Nullable
|
||||
public String getScrollId() {
|
||||
return scrollId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the contained {@link SearchHit}s.
|
||||
*/
|
||||
public List<SearchHit<T>> getSearchHits() {
|
||||
return Collections.unmodifiableList(searchHits);
|
||||
}
|
||||
|
||||
public long getTotalHits() {
|
||||
return totalHits;
|
||||
}
|
||||
|
||||
public float getMaxScore() {
|
||||
return maxScore;
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region SearchHit access
|
||||
@ -86,7 +107,30 @@ public class SearchHits<T> implements Streamable<SearchHit<T>> {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SearchHits{" + "totalHits=" + totalHits + ", maxScore=" + maxScore + ", searchHits="
|
||||
+ StringUtils.collectionToCommaDelimitedString(searchHits) + '}';
|
||||
return "SearchHits{" +
|
||||
"totalHits=" + totalHits +
|
||||
", maxScore=" + maxScore +
|
||||
", scrollId='" + scrollId + '\'' +
|
||||
", searchHits=" + StringUtils.collectionToCommaDelimitedString(searchHits) +
|
||||
", aggregations=" + aggregations +
|
||||
'}';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if aggregations are available
|
||||
*/
|
||||
// region aggregations
|
||||
public boolean hasAggregations() {
|
||||
return aggregations != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the aggregations.
|
||||
*/
|
||||
@Nullable
|
||||
public Aggregations getAggregations() {
|
||||
return aggregations;
|
||||
}
|
||||
// endregion
|
||||
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
package org.springframework.data.elasticsearch.core;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -59,8 +60,7 @@ public interface SearchOperations {
|
||||
*/
|
||||
long count(Query query, @Nullable Class<?> clazz, IndexCoordinates index);
|
||||
|
||||
<T> T query(Query query, ResultsExtractor<T> resultsExtractor, Class<T> clazz, IndexCoordinates index);
|
||||
|
||||
// region deprecated
|
||||
/**
|
||||
* Execute the query against elasticsearch and return the first returned object.
|
||||
*
|
||||
@ -82,11 +82,13 @@ public interface SearchOperations {
|
||||
* @param clazz the entity clazz used for property mapping
|
||||
* @param index the index to run the query against
|
||||
* @return a page with aggregations
|
||||
* @deprecated since 4.0, use {@link #searchForPage(Query, Class, IndexCoordinates)}.
|
||||
* @deprecated since 4.0, use {@link #search(Query, Class, IndexCoordinates)}.
|
||||
*/
|
||||
@Deprecated
|
||||
default <T> AggregatedPage<T> queryForPage(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
return (AggregatedPage<T>) SearchHitSupport.unwrapSearchHits(searchForPage(query, clazz, index));
|
||||
SearchHits<T> searchHits = search(query, clazz, index);
|
||||
AggregatedPage<SearchHit<T>> aggregatedPage = SearchHitSupport.page(searchHits, query.getPageable());
|
||||
return (AggregatedPage<T>) SearchHitSupport.unwrapSearchHits(aggregatedPage);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -96,13 +98,19 @@ public interface SearchOperations {
|
||||
* @param clazz the entity clazz used for property mapping
|
||||
* @param index the index to run the query against
|
||||
* @return list of pages with the results
|
||||
* @deprecated since 4.0, use {@link #multiSearchForPage(List, Class, IndexCoordinates)}.
|
||||
* @deprecated since 4.0, use {@link #multiSearch(List, Class, IndexCoordinates)}.
|
||||
*/
|
||||
@Deprecated
|
||||
default <T> List<Page<T>> queryForPage(List<? extends Query> queries, Class<T> clazz, IndexCoordinates index) {
|
||||
return multiSearchForPage(queries, clazz, index).stream() //
|
||||
.map(page -> (Page<T>) SearchHitSupport.unwrapSearchHits(page)) //
|
||||
.collect(Collectors.toList());
|
||||
List<Page<T>> pageList = new ArrayList<>();
|
||||
List<SearchHits<T>> searchHitsList = multiSearch(queries, clazz, index);
|
||||
Iterator<? extends Query> qit = queries.iterator();
|
||||
searchHitsList.forEach(searchHits -> {
|
||||
AggregatedPage<SearchHit<T>> aggregatedPage = SearchHitSupport.page(searchHits, qit.next().getPageable());
|
||||
Page<T> page = (Page<T>) SearchHitSupport.unwrapSearchHits(aggregatedPage);
|
||||
pageList.add(page);
|
||||
});
|
||||
return pageList;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -112,14 +120,22 @@ public interface SearchOperations {
|
||||
* @param classes the entity classes used for the queries
|
||||
* @param index the index to run the query against
|
||||
* @return list of pages with the results
|
||||
* @deprecated since 4.0, use {@link #multiSearchForPage(List, List, IndexCoordinates)}.
|
||||
* @deprecated since 4.0, use {@link #multiSearch(List, List, IndexCoordinates)}.
|
||||
*/
|
||||
@Deprecated
|
||||
default List<AggregatedPage<?>> queryForPage(List<? extends Query> queries, List<Class<?>> classes,
|
||||
IndexCoordinates index) {
|
||||
return multiSearchForPage(queries, classes, index).stream() //
|
||||
.map(page -> (AggregatedPage<?>) SearchHitSupport.unwrapSearchHits(page)) //
|
||||
.collect(Collectors.toList());
|
||||
List<AggregatedPage<?>> pageList = new ArrayList<>();
|
||||
List<SearchHits<?>> searchHitsList = multiSearch(queries, classes, index);
|
||||
Iterator<? extends Query> qit = queries.iterator();
|
||||
searchHitsList.forEach(searchHits -> {
|
||||
AggregatedPage<? extends SearchHit<?>> aggregatedPage = SearchHitSupport.page(searchHits,
|
||||
qit.next().getPageable());
|
||||
AggregatedPage<?> page = (AggregatedPage<?>) SearchHitSupport.unwrapSearchHits(aggregatedPage);
|
||||
pageList.add(page);
|
||||
});
|
||||
|
||||
return pageList;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -219,7 +235,7 @@ public interface SearchOperations {
|
||||
* @param scrollTimeInMillis duration of the scroll time
|
||||
* @param clazz The class of entity to retrieve.
|
||||
* @return scrolled page result
|
||||
* @deprecated since 4.0, use {@link #searchScrollStart(long, Query, Class, IndexCoordinates)}.
|
||||
* @deprecated since 4.0, use {@link #searchScrollContinue(String, long, Class)}.
|
||||
*/
|
||||
@Deprecated
|
||||
default <T> ScrolledPage<T> continueScroll(@Nullable String scrollId, long scrollTimeInMillis, Class<T> clazz) {
|
||||
@ -250,8 +266,11 @@ public interface SearchOperations {
|
||||
*/
|
||||
@Deprecated
|
||||
default <T> AggregatedPage<T> moreLikeThis(MoreLikeThisQuery query, Class<T> clazz, IndexCoordinates index) {
|
||||
return (AggregatedPage<T>) SearchHitSupport.unwrapSearchHits(search(query, clazz, index));
|
||||
SearchHits<T> searchHits = search(query, clazz, index);
|
||||
AggregatedPage<SearchHit<T>> aggregatedPage = SearchHitSupport.page(searchHits, query.getPageable());
|
||||
return (AggregatedPage<T>) SearchHitSupport.unwrapSearchHits(aggregatedPage);
|
||||
}
|
||||
// endregion
|
||||
|
||||
/**
|
||||
* Execute the query against elasticsearch and return the first returned object.
|
||||
@ -263,41 +282,30 @@ public interface SearchOperations {
|
||||
*/
|
||||
@Nullable
|
||||
default <T> SearchHit<T> searchOne(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
List<SearchHit<T>> content = searchForPage(query, clazz, index).getContent();
|
||||
List<SearchHit<T>> content = search(query, clazz, index).getSearchHits();
|
||||
return content.isEmpty() ? null : content.get(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the query against elasticsearch and return result as {@link AggregatedPage}.
|
||||
* Execute the multi search query against elasticsearch and return result as {@link List} of {@link SearchHits}.
|
||||
*
|
||||
* @param query the query to execute
|
||||
* @param queries the queries to execute
|
||||
* @param clazz the entity clazz used for property mapping
|
||||
* @param index the index to run the query against
|
||||
* @return a page with aggregations
|
||||
* @param <T> element return type
|
||||
* @return list of SearchHits
|
||||
*/
|
||||
<T> AggregatedPage<SearchHit<T>> searchForPage(Query query, Class<T> clazz, IndexCoordinates index);
|
||||
<T> List<SearchHits<T>> multiSearch(List<? extends Query> queries, Class<T> clazz, IndexCoordinates index);
|
||||
|
||||
/**
|
||||
* Execute the multi-search against elasticsearch and return result as {@link List} of {@link AggregatedPage}
|
||||
* Execute the multi search query against elasticsearch and return result as {@link List} of {@link SearchHits}.
|
||||
*
|
||||
* @param queries the queries
|
||||
* @param clazz the entity clazz used for property mapping
|
||||
* @param queries the queries to execute
|
||||
* @param classes the entity classes used for property mapping
|
||||
* @param index the index to run the query against
|
||||
* @return list of pages with the results
|
||||
* @return list of SearchHits
|
||||
*/
|
||||
<T> List<AggregatedPage<SearchHit<T>>> multiSearchForPage(List<? extends Query> queries, Class<T> clazz,
|
||||
IndexCoordinates index);
|
||||
|
||||
/**
|
||||
* Execute the multi-search against elasticsearch and return result as {@link List} of {@link AggregatedPage}
|
||||
*
|
||||
* @param queries the queries
|
||||
* @param classes the entity classes used for the queries
|
||||
* @param index the index to run the query against
|
||||
* @return list of pages with the results
|
||||
*/
|
||||
List<AggregatedPage<? extends SearchHit<?>>> multiSearchForPage(List<? extends Query> queries, List<Class<?>> classes,
|
||||
IndexCoordinates index);
|
||||
List<SearchHits<?>> multiSearch(List<? extends Query> queries, List<Class<?>> classes, IndexCoordinates index);
|
||||
|
||||
/**
|
||||
* Execute the criteria query against elasticsearch and return result as {@link SearchHits}
|
||||
@ -308,42 +316,7 @@ public interface SearchOperations {
|
||||
* @param index the index to run the query against
|
||||
* @return SearchHits containing the list of found objects
|
||||
*/
|
||||
default <T> SearchHits<T> search(Query query, Class<T> clazz, IndexCoordinates index) {
|
||||
AggregatedPage<SearchHit<T>> aggregatedPage = searchForPage(query, clazz, index);
|
||||
return new SearchHits<>(aggregatedPage.getContent(), aggregatedPage.getTotalElements(),
|
||||
aggregatedPage.getMaxScore());
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the multi search query against elasticsearch and return result as {@link List} of {@link SearchHits}.
|
||||
*
|
||||
* @param queries the queries to execute
|
||||
* @param clazz the entity clazz used for property mapping
|
||||
* @param index the index to run the query against
|
||||
* @param <T> element return type
|
||||
* @return list of SearchHits
|
||||
*/
|
||||
default <T> List<SearchHits<T>> multiSearch(List<Query> queries, Class<T> clazz, IndexCoordinates index) {
|
||||
return multiSearchForPage(queries, clazz, index).stream()
|
||||
.map(page -> new SearchHits<T>(page.getContent(), page.getTotalElements(), page.getMaxScore()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the multi search query against elasticsearch and return result as {@link List} of {@link SearchHits}.
|
||||
*
|
||||
* @param queries the queries to execute
|
||||
* @param classes the entity classes used for property mapping
|
||||
* @param index the index to run the query against
|
||||
* @return list of SearchHits
|
||||
*/
|
||||
default List<SearchHits<?>> multiSearch(List<Query> queries, List<Class<?>> classes, IndexCoordinates index) {
|
||||
List<SearchHits<?>> searchHitsList = new ArrayList<>();
|
||||
multiSearchForPage(queries, classes, index).forEach(page -> {
|
||||
searchHitsList.add(new SearchHits(page.getContent(), page.getTotalElements(), page.getMaxScore()));
|
||||
});
|
||||
return searchHitsList;
|
||||
}
|
||||
<T> SearchHits<T> search(Query query, Class<T> clazz, IndexCoordinates index);
|
||||
|
||||
/**
|
||||
* more like this query to search for documents that are "like" a specific document.
|
||||
@ -352,9 +325,9 @@ public interface SearchOperations {
|
||||
* @param query the query to execute
|
||||
* @param clazz the entity clazz used for property mapping
|
||||
* @param index the index to run the query against
|
||||
* @return page with the results
|
||||
* @return SearchHits containing the list of found objects
|
||||
*/
|
||||
<T> AggregatedPage<SearchHit<T>> search(MoreLikeThisQuery query, Class<T> clazz, IndexCoordinates index);
|
||||
<T> SearchHits<T> search(MoreLikeThisQuery query, Class<T> clazz, IndexCoordinates index);
|
||||
|
||||
/**
|
||||
* Returns scrolled page for given query
|
||||
@ -377,7 +350,7 @@ public interface SearchOperations {
|
||||
* @return scrolled page result
|
||||
*/
|
||||
<T> ScrolledPage<SearchHit<T>> searchScrollContinue(@Nullable String scrollId, long scrollTimeInMillis,
|
||||
Class<T> clazz);
|
||||
Class<T> clazz);
|
||||
|
||||
/**
|
||||
* Clears the search contexts associated with specified scroll ids.
|
||||
|
@ -9,7 +9,9 @@ import org.springframework.data.elasticsearch.core.ScrolledPage;
|
||||
* @author Petar Tahchiev
|
||||
* @author Sascha Woo
|
||||
* @author Peter-Josef Meisch
|
||||
* @deprecated since 4.0, use {@link org.springframework.data.elasticsearch.core.SearchHits} to return values.
|
||||
*/
|
||||
@Deprecated
|
||||
public interface AggregatedPage<T> extends ScrolledPage<T>, ScoredPage<T> {
|
||||
|
||||
boolean hasAggregations();
|
||||
|
@ -20,6 +20,7 @@ import java.util.List;
|
||||
import org.springframework.data.convert.EntityConverter;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.elasticsearch.core.SearchHit;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.document.Document;
|
||||
import org.springframework.data.elasticsearch.core.document.SearchDocument;
|
||||
@ -85,11 +86,21 @@ public interface ElasticsearchConverter
|
||||
<T> T mapDocument(@Nullable Document document, Class<T> type);
|
||||
|
||||
/**
|
||||
* builds a {@link SearchHit} from a {@link SearchDocument}.
|
||||
*
|
||||
* @param searchDocument must not be {@literal null}
|
||||
* builds a {@link SearchHits} from a {@link SearchDocumentResponse}.
|
||||
* @param <T> the clazz of the type, must not be {@literal null}.
|
||||
* @param type the type of the returned data, must not be {@literal null}.
|
||||
* @param searchDocumentResponse the response to read from, must not be {@literal null}.
|
||||
* @return a SearchHits object
|
||||
* @since 4.0
|
||||
*/
|
||||
<T> SearchHits<T> read(Class<T> type, SearchDocumentResponse searchDocumentResponse);
|
||||
|
||||
/**
|
||||
* builds a {@link SearchHit} from a {@link SearchDocument}.
|
||||
*
|
||||
* @param <T> the clazz of the type, must not be {@literal null}.
|
||||
* @param type the type of the returned data, must not be {@literal null}.
|
||||
* @param searchDocument must not be {@literal null}
|
||||
* @return SearchHit with all available information filled in
|
||||
* @since 4.0
|
||||
*/
|
||||
@ -108,7 +119,7 @@ public interface ElasticsearchConverter
|
||||
|
||||
/**
|
||||
* Map an object to a {@link Document}.
|
||||
*
|
||||
*
|
||||
* @param source
|
||||
* @return will not be {@literal null}.
|
||||
*/
|
||||
|
@ -17,10 +17,20 @@ package org.springframework.data.elasticsearch.core.convert;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.elasticsearch.search.aggregations.Aggregations;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@ -36,6 +46,7 @@ import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.elasticsearch.ElasticsearchException;
|
||||
import org.springframework.data.elasticsearch.annotations.ScriptedField;
|
||||
import org.springframework.data.elasticsearch.core.SearchHit;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
|
||||
import org.springframework.data.elasticsearch.core.document.Document;
|
||||
@ -152,11 +163,6 @@ public class MappingElasticsearchConverter
|
||||
@SuppressWarnings("unchecked")
|
||||
@Nullable
|
||||
protected <R> R doRead(Document source, TypeInformation<R> typeHint) {
|
||||
|
||||
if (source == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
typeHint = (TypeInformation<R>) typeMapper.readType(source, typeHint);
|
||||
|
||||
if (conversions.hasCustomReadTarget(Map.class, typeHint.getType())) {
|
||||
@ -597,8 +603,28 @@ public class MappingElasticsearchConverter
|
||||
: type.cast(mappedResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> SearchHits<T> read(Class<T> type, SearchDocumentResponse searchDocumentResponse) {
|
||||
|
||||
Assert.notNull(type, "type must not be null");
|
||||
Assert.notNull(searchDocumentResponse, "searchDocumentResponse must not be null");
|
||||
|
||||
long totalHits = searchDocumentResponse.getTotalHits();
|
||||
float maxScore = searchDocumentResponse.getMaxScore();
|
||||
String scrollId = searchDocumentResponse.getScrollId();
|
||||
List<SearchHit<T>> searchHits = searchDocumentResponse.getSearchDocuments().stream() //
|
||||
.map(searchDocument -> read(type, searchDocument)) //
|
||||
.collect(Collectors.toList());
|
||||
Aggregations aggregations = searchDocumentResponse.getAggregations();
|
||||
return new SearchHits<T>(totalHits, maxScore, scrollId, searchHits, aggregations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> SearchHit<T> read(Class<T> type, SearchDocument searchDocument) {
|
||||
|
||||
Assert.notNull(type, "type must not be null");
|
||||
Assert.notNull(searchDocument, "searchDocument must not be null");
|
||||
|
||||
String id = searchDocument.hasId() ? searchDocument.getId() : null;
|
||||
float score = searchDocument.getScore();
|
||||
Object[] sortValues = searchDocument.getSortValues();
|
||||
|
@ -18,6 +18,7 @@ package org.springframework.data.elasticsearch.repository.query;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.SearchHitSupport;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentProperty;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;
|
||||
@ -71,7 +72,8 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery
|
||||
elasticsearchOperations.delete(query, clazz, index);
|
||||
} else if (queryMethod.isPageQuery()) {
|
||||
query.setPageable(accessor.getPageable());
|
||||
result = elasticsearchOperations.searchForPage(query, clazz, index);
|
||||
SearchHits<?> searchHits = elasticsearchOperations.search(query, clazz, index);
|
||||
result = SearchHitSupport.page(searchHits, query.getPageable());
|
||||
} else if (queryMethod.isStreamQuery()) {
|
||||
Class<?> entityType = clazz;
|
||||
if (accessor.getPageable().isUnpaged()) {
|
||||
|
@ -21,6 +21,7 @@ import java.util.regex.Pattern;
|
||||
import org.springframework.core.convert.support.GenericConversionService;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.SearchHitSupport;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.convert.DateTimeConverters;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.StringQuery;
|
||||
@ -77,7 +78,8 @@ public class ElasticsearchStringQuery extends AbstractElasticsearchRepositoryQue
|
||||
|
||||
if (queryMethod.isPageQuery()) {
|
||||
stringQuery.setPageable(accessor.getPageable());
|
||||
result = elasticsearchOperations.searchForPage(stringQuery, clazz, index);
|
||||
SearchHits<?> searchHits = elasticsearchOperations.search(stringQuery, clazz, index);
|
||||
result = SearchHitSupport.page(searchHits, stringQuery.getPageable());
|
||||
} else if (queryMethod.isCollectionQuery()) {
|
||||
if (accessor.getPageable().isPaged()) {
|
||||
stringQuery.setPageable(accessor.getPageable());
|
||||
|
@ -39,6 +39,7 @@ import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.IndexOperations;
|
||||
import org.springframework.data.elasticsearch.core.SearchHit;
|
||||
import org.springframework.data.elasticsearch.core.SearchHitSupport;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentEntity;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
@ -139,8 +140,9 @@ public abstract class AbstractElasticsearchRepository<T, ID> implements Elastics
|
||||
@Override
|
||||
public Page<T> findAll(Pageable pageable) {
|
||||
NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withPageable(pageable).build();
|
||||
AggregatedPage<SearchHit<T>> page = operations.searchForPage(query, getEntityClass(), getIndexCoordinates());
|
||||
return unwrapSearchHits(page);
|
||||
SearchHits<T> searchHits = operations.search(query, getEntityClass(), getIndexCoordinates());
|
||||
AggregatedPage<SearchHit<T>> page = SearchHitSupport.page(searchHits, query.getPageable());
|
||||
return (Page<T>) SearchHitSupport.unwrapSearchHits(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -152,12 +154,9 @@ public abstract class AbstractElasticsearchRepository<T, ID> implements Elastics
|
||||
}
|
||||
NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withPageable(PageRequest.of(0, itemCount, sort)).build();
|
||||
AggregatedPage<SearchHit<T>> page = operations.searchForPage(query, getEntityClass(), getIndexCoordinates());
|
||||
return unwrapSearchHits(page);
|
||||
}
|
||||
|
||||
private Page<T> unwrapSearchHits(AggregatedPage<SearchHit<T>> page) {
|
||||
return (Page<T>) SearchHitSupport.unwrapSearchHits(page);
|
||||
List<SearchHit<T>> searchHitList = operations.search(query, getEntityClass(), getIndexCoordinates())
|
||||
.getSearchHits();
|
||||
return (List<T>) SearchHitSupport.unwrapSearchHits(searchHitList);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -226,21 +225,24 @@ public abstract class AbstractElasticsearchRepository<T, ID> implements Elastics
|
||||
return new PageImpl<>(Collections.<T> emptyList());
|
||||
}
|
||||
searchQuery.setPageable(PageRequest.of(0, count));
|
||||
AggregatedPage<SearchHit<T>> page = operations.searchForPage(searchQuery, getEntityClass(), getIndexCoordinates());
|
||||
return unwrapSearchHits(page);
|
||||
SearchHits<T> searchHits = operations.search(searchQuery, getEntityClass(), getIndexCoordinates());
|
||||
AggregatedPage<SearchHit<T>> page = SearchHitSupport.page(searchHits, searchQuery.getPageable());
|
||||
return (Page<T>) SearchHitSupport.unwrapSearchHits(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<T> search(QueryBuilder query, Pageable pageable) {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(query).withPageable(pageable).build();
|
||||
AggregatedPage<SearchHit<T>> page = operations.searchForPage(searchQuery, getEntityClass(), getIndexCoordinates());
|
||||
return unwrapSearchHits(page);
|
||||
SearchHits<T> searchHits = operations.search(searchQuery, getEntityClass(), getIndexCoordinates());
|
||||
AggregatedPage<SearchHit<T>> page = SearchHitSupport.page(searchHits, searchQuery.getPageable());
|
||||
return (Page<T>) SearchHitSupport.unwrapSearchHits(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<T> search(Query query) {
|
||||
AggregatedPage<SearchHit<T>> page = operations.searchForPage(query, getEntityClass(), getIndexCoordinates());
|
||||
return unwrapSearchHits(page);
|
||||
SearchHits<T> searchHits = operations.search(query, getEntityClass(), getIndexCoordinates());
|
||||
AggregatedPage<SearchHit<T>> page = SearchHitSupport.page(searchHits, query.getPageable());
|
||||
return (Page<T>) SearchHitSupport.unwrapSearchHits(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -255,8 +257,9 @@ public abstract class AbstractElasticsearchRepository<T, ID> implements Elastics
|
||||
query.addFields(fields);
|
||||
}
|
||||
|
||||
AggregatedPage<SearchHit<T>> page = operations.search(query, getEntityClass(), getIndexCoordinates());
|
||||
return unwrapSearchHits(page);
|
||||
SearchHits<T> searchHits = operations.search(query, getEntityClass(), getIndexCoordinates());
|
||||
AggregatedPage<SearchHit<T>> page = SearchHitSupport.page(searchHits, pageable);
|
||||
return (Page<T>) SearchHitSupport.unwrapSearchHits(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -38,16 +38,13 @@ import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.annotations.FieldType;
|
||||
import org.springframework.data.elasticsearch.annotations.InnerField;
|
||||
import org.springframework.data.elasticsearch.annotations.MultiField;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.SearchHit;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.GetQuery;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
@ -196,11 +193,11 @@ public class NestedObjectTests {
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
|
||||
|
||||
Page<SearchHit<PersonMultipleLevelNested>> personIndexed = elasticsearchTemplate.searchForPage(searchQuery,
|
||||
SearchHits<PersonMultipleLevelNested> personIndexed = elasticsearchTemplate.search(searchQuery,
|
||||
PersonMultipleLevelNested.class, index);
|
||||
assertThat(personIndexed).isNotNull();
|
||||
assertThat(personIndexed.getTotalElements()).isEqualTo(1);
|
||||
assertThat(personIndexed.getContent().get(0).getContent().getId()).isEqualTo("1");
|
||||
assertThat(personIndexed.getTotalHits()).isEqualTo(1);
|
||||
assertThat(personIndexed.getSearchHit(0).getContent().getId()).isEqualTo("1");
|
||||
}
|
||||
|
||||
private List<IndexQuery> createPerson() {
|
||||
@ -381,10 +378,10 @@ public class NestedObjectTests {
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
|
||||
.withQuery(nestedQuery("buckets", termQuery("buckets.1", "test3"), ScoreMode.None)).build();
|
||||
AggregatedPage<SearchHit<Book>> books = elasticsearchTemplate.searchForPage(searchQuery, Book.class, index);
|
||||
SearchHits<Book> books = elasticsearchTemplate.search(searchQuery, Book.class, index);
|
||||
|
||||
assertThat(books.getContent()).hasSize(1);
|
||||
assertThat(books.getContent().get(0).getContent().getId()).isEqualTo(book2.getId());
|
||||
assertThat(books.getSearchHits()).hasSize(1);
|
||||
assertThat(books.getSearchHit(0).getContent().getId()).isEqualTo(book2.getId());
|
||||
}
|
||||
|
||||
@Setter
|
||||
|
@ -60,7 +60,6 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Version;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
@ -73,7 +72,6 @@ import org.springframework.data.elasticsearch.annotations.InnerField;
|
||||
import org.springframework.data.elasticsearch.annotations.MultiField;
|
||||
import org.springframework.data.elasticsearch.annotations.Score;
|
||||
import org.springframework.data.elasticsearch.annotations.ScriptedField;
|
||||
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.*;
|
||||
@ -271,7 +269,7 @@ public abstract class ElasticsearchTemplateTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnPageForGivenSearchQuery() {
|
||||
public void shouldReturnSearchHitsForGivenSearchQuery() {
|
||||
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
@ -286,15 +284,15 @@ public abstract class ElasticsearchTemplateTests {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities).isNotNull();
|
||||
assertThat(sampleEntities.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test // DATAES-595
|
||||
public void shouldReturnPageUsingLocalPreferenceForGivenSearchQuery() {
|
||||
public void shouldReturnSearchHitsUsingLocalPreferenceForGivenSearchQuery() {
|
||||
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
@ -310,12 +308,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withPreference("_local").build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQueryWithValidPreference,
|
||||
SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQueryWithValidPreference, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities).isNotNull();
|
||||
assertThat(sampleEntities.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test // DATAES-595
|
||||
@ -336,7 +333,7 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// when
|
||||
assertThatThrownBy(() -> {
|
||||
operations.searchForPage(searchQueryWithInvalidPreference, SampleEntity.class, index);
|
||||
operations.search(searchQueryWithInvalidPreference, SampleEntity.class, index);
|
||||
}).isInstanceOf(Exception.class);
|
||||
}
|
||||
|
||||
@ -353,15 +350,16 @@ public abstract class ElasticsearchTemplateTests {
|
||||
operations.index(idxQuery, IndexCoordinates.of(INDEX_1_NAME).withTypes("test-type"));
|
||||
indexOperations.refresh(IndexCoordinates.of(INDEX_1_NAME));
|
||||
|
||||
// when
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery())
|
||||
.withIndicesOptions(IndicesOptions.lenientExpandOpen()).build();
|
||||
Page<SearchHit<SampleEntity>> entities = operations.searchForPage(searchQuery, SampleEntity.class,
|
||||
|
||||
// when
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class,
|
||||
IndexCoordinates.of(INDEX_1_NAME, INDEX_2_NAME));
|
||||
|
||||
// then
|
||||
assertThat(entities).isNotNull();
|
||||
assertThat(entities.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -381,15 +379,16 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.version(System.currentTimeMillis()).build();
|
||||
|
||||
indexQueries = getIndexQueries(Arrays.asList(sampleEntity1, sampleEntity2));
|
||||
|
||||
// when
|
||||
operations.bulkIndex(indexQueries, index);
|
||||
indexOperations.refresh(SampleEntity.class);
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(2);
|
||||
|
||||
// when
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -443,8 +442,9 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(0);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -465,8 +465,8 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(0);
|
||||
SearchHits<SampleEntity> sampleEntities = operations.search(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalHits()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -490,8 +490,8 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(0);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test // DATAES-547
|
||||
@ -578,10 +578,10 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withFilter(boolQuery().filter(termQuery("id", documentId))).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(1);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -613,11 +613,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withSort(new FieldSortBuilder("rate").order(SortOrder.ASC)).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(3);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getRate()).isEqualTo(sampleEntity2.getRate());
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(3);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getRate()).isEqualTo(sampleEntity2.getRate());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -650,12 +650,12 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withSort(new FieldSortBuilder("message").order(SortOrder.ASC)).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(3);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getRate()).isEqualTo(sampleEntity2.getRate());
|
||||
assertThat(sampleEntities.getContent().get(1).getContent().getMessage()).isEqualTo(sampleEntity1.getMessage());
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(3);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getRate()).isEqualTo(sampleEntity2.getRate());
|
||||
assertThat(searchHits.getSearchHit(1).getContent().getMessage()).isEqualTo(sampleEntity1.getMessage());
|
||||
}
|
||||
|
||||
@Test // DATAES-312
|
||||
@ -688,12 +688,12 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withPageable(PageRequest.of(0, 10, Sort.by(Sort.Order.asc("message").nullsFirst()))).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(3);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getRate()).isEqualTo(sampleEntity3.getRate());
|
||||
assertThat(sampleEntities.getContent().get(1).getContent().getMessage()).isEqualTo(sampleEntity1.getMessage());
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(3);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getRate()).isEqualTo(sampleEntity3.getRate());
|
||||
assertThat(searchHits.getSearchHit(1).getContent().getMessage()).isEqualTo(sampleEntity1.getMessage());
|
||||
}
|
||||
|
||||
@Test // DATAES-312
|
||||
@ -726,12 +726,12 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withPageable(PageRequest.of(0, 10, Sort.by(Sort.Order.asc("message").nullsLast()))).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(3);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getRate()).isEqualTo(sampleEntity1.getRate());
|
||||
assertThat(sampleEntities.getContent().get(1).getContent().getMessage()).isEqualTo(sampleEntity2.getMessage());
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(3);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getRate()).isEqualTo(sampleEntity1.getRate());
|
||||
assertThat(searchHits.getSearchHit(1).getContent().getMessage()).isEqualTo(sampleEntity2.getMessage());
|
||||
}
|
||||
|
||||
@Test // DATAES-467, DATAES-657
|
||||
@ -752,12 +752,12 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page.getTotalElements()).isEqualTo(2);
|
||||
assertThat(page.getContent().get(0).getContent().getId()).isEqualTo("2");
|
||||
assertThat(page.getContent().get(1).getContent().getId()).isEqualTo("1");
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(2);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo("2");
|
||||
assertThat(searchHits.getSearchHit(1).getContent().getId()).isEqualTo("1");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -776,10 +776,10 @@ public abstract class ElasticsearchTemplateTests {
|
||||
StringQuery stringQuery = new StringQuery(matchAllQuery().toString());
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(stringQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(stringQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(1);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -807,11 +807,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withScriptField(
|
||||
new ScriptField("scriptedRate", new Script(ScriptType.INLINE, "expression", "doc['rate'] * factor", params)))
|
||||
.build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(1);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getScriptedRate()).isEqualTo(4.0);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getScriptedRate()).isEqualTo(4.0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -830,14 +830,14 @@ public abstract class ElasticsearchTemplateTests {
|
||||
StringQuery stringQuery = new StringQuery(matchAllQuery().toString(), PageRequest.of(0, 10));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(stringQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(stringQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnSortedPageableResultsGivenStringQuery() {
|
||||
public void shouldReturnSortedResultsGivenStringQuery() {
|
||||
|
||||
// given
|
||||
String documentId = randomNumeric(5);
|
||||
@ -857,10 +857,10 @@ public abstract class ElasticsearchTemplateTests {
|
||||
Sort.by(Order.asc("message")));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(stringQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(stringQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -962,12 +962,12 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isEqualTo(1);
|
||||
final SampleEntity actual = page.getContent().get(0).getContent();
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
final SampleEntity actual = searchHits.getSearchHit(0).getContent();
|
||||
assertThat(actual.message).isEqualTo(message);
|
||||
assertThat(actual.getType()).isNull();
|
||||
assertThat(actual.getLocation()).isNull();
|
||||
@ -994,12 +994,12 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withSourceFilter(sourceFilter.build()).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isEqualTo(1);
|
||||
assertThat(page.getContent().get(0).getContent().getMessage()).isEqualTo(message);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getMessage()).isEqualTo(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -1034,11 +1034,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
moreLikeThisQuery.setMinDocFreq(1);
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.search(moreLikeThisQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(1);
|
||||
List<SampleEntity> content = sampleEntities.getContent().stream().map(SearchHit::getContent)
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
List<SampleEntity> content = searchHits.getSearchHits().stream().map(SearchHit::getContent)
|
||||
.collect(Collectors.toList());
|
||||
assertThat(content).contains(sampleEntity);
|
||||
}
|
||||
@ -1564,10 +1564,9 @@ public abstract class ElasticsearchTemplateTests {
|
||||
queries.add(new NativeSearchQueryBuilder().withQuery(termQuery("message", "ac")).build());
|
||||
|
||||
// then
|
||||
List<AggregatedPage<SearchHit<SampleEntity>>> sampleEntities = operations.multiSearchForPage(queries,
|
||||
SampleEntity.class, index);
|
||||
for (Page<SearchHit<SampleEntity>> sampleEntity : sampleEntities) {
|
||||
assertThat(sampleEntity.getTotalElements()).isEqualTo(1);
|
||||
List<SearchHits<SampleEntity>> searchHits = operations.multiSearch(queries, SampleEntity.class, index);
|
||||
for (SearchHits<SampleEntity> sampleEntity : searchHits) {
|
||||
assertThat(sampleEntity.getTotalHits()).isEqualTo(1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1593,18 +1592,17 @@ public abstract class ElasticsearchTemplateTests {
|
||||
queries.add(new NativeSearchQueryBuilder().withQuery(termQuery("message", "ab")).build());
|
||||
queries.add(new NativeSearchQueryBuilder().withQuery(termQuery("description", "bc")).build());
|
||||
|
||||
List<AggregatedPage<? extends SearchHit<?>>> pages = operations.multiSearchForPage(queries,
|
||||
Lists.newArrayList(SampleEntity.class, clazz),
|
||||
List<SearchHits<?>> searchHitsList = operations.multiSearch(queries, Lists.newArrayList(SampleEntity.class, clazz),
|
||||
IndexCoordinates.of(index.getIndexName(), bookIndex.getIndexName()));
|
||||
|
||||
// then
|
||||
Page<?> page0 = pages.get(0);
|
||||
assertThat(page0.getTotalElements()).isEqualTo(1L);
|
||||
SearchHit<SampleEntity> searchHit0 = (SearchHit<SampleEntity>) page0.getContent().get(0);
|
||||
SearchHits<?> searchHits0 = searchHitsList.get(0);
|
||||
assertThat(searchHits0.getTotalHits()).isEqualTo(1L);
|
||||
SearchHit<SampleEntity> searchHit0 = (SearchHit<SampleEntity>) searchHits0.getSearchHit(0);
|
||||
assertThat(searchHit0.getContent().getClass()).isEqualTo(SampleEntity.class);
|
||||
Page<?> page1 = pages.get(1);
|
||||
assertThat(page1.getTotalElements()).isEqualTo(1L);
|
||||
SearchHit<Book> searchHit1 = (SearchHit<Book>) page1.getContent().get(0);
|
||||
SearchHits<?> searchHits1 = searchHitsList.get(1);
|
||||
assertThat(searchHits1.getTotalHits()).isEqualTo(1L);
|
||||
SearchHit<Book> searchHit1 = (SearchHit<Book>) searchHits1.getSearchHit(0);
|
||||
assertThat(searchHit1.getContent().getClass()).isEqualTo(clazz);
|
||||
}
|
||||
|
||||
@ -1629,8 +1627,8 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("id", documentId)).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(0);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -1649,10 +1647,10 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
// then
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getContent()).hasSize(1);
|
||||
assertThat(page.getContent().get(0).getContent().getId()).isEqualTo(indexQuery.getId());
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo(indexQuery.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -1699,11 +1697,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.withQuery(boolQuery().must(wildcardQuery("message", "*a*")).should(wildcardQuery("message", "*b*")))
|
||||
.withMinScore(2.0F).build();
|
||||
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page.getTotalElements()).isEqualTo(1);
|
||||
assertThat(page.getContent().get(0).getContent().getMessage()).isEqualTo("ab");
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getMessage()).isEqualTo("ab");
|
||||
}
|
||||
|
||||
@Test // DATAES-462
|
||||
@ -1723,12 +1721,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(termQuery("message", "xz"))
|
||||
.withSort(SortBuilders.fieldSort("message")).withTrackScores(true).build();
|
||||
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isInstanceOf(AggregatedPage.class);
|
||||
assertThat(((AggregatedPage) page).getMaxScore()).isGreaterThan(0f);
|
||||
assertThat(page.getContent().get(0).getScore()).isGreaterThan(0f);
|
||||
assertThat(searchHits.getMaxScore()).isGreaterThan(0f);
|
||||
assertThat(searchHits.getSearchHit(0).getScore()).isGreaterThan(0f);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -1784,12 +1781,12 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(2);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
List<SearchHit<SampleEntity>> content = sampleEntities.getContent();
|
||||
assertThat(content.get(0).getContent().getId()).isNotNull();
|
||||
assertThat(content.get(1).getContent().getId()).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(2);
|
||||
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getId()).isNotNull();
|
||||
assertThat(searchHits.getSearchHit(1).getContent().getId()).isNotNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -1828,12 +1825,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// then
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
Page<SearchHit<Map>> sampleEntities = operations.searchForPage(searchQuery, Map.class, index);
|
||||
SearchHits<Map> searchHits = operations.search(searchQuery, Map.class, index);
|
||||
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(2);
|
||||
List<SearchHit<Map>> content = sampleEntities.getContent();
|
||||
assertThat(content.get(0).getContent().get("userId")).isEqualTo(person1.get("userId"));
|
||||
assertThat(content.get(1).getContent().get("userId")).isEqualTo(person2.get("userId"));
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(2);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().get("userId")).isEqualTo(person1.get("userId"));
|
||||
assertThat(searchHits.getSearchHit(1).getContent().get("userId")).isEqualTo(person2.get("userId"));
|
||||
}
|
||||
|
||||
@Test // DATAES-523
|
||||
@ -1852,10 +1848,10 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
// when
|
||||
Page<SearchHit<GTEVersionEntity>> entities = operations.searchForPage(searchQuery, GTEVersionEntity.class, index);
|
||||
SearchHits<GTEVersionEntity> entities = operations.search(searchQuery, GTEVersionEntity.class, index);
|
||||
// then
|
||||
assertThat(entities).isNotNull();
|
||||
assertThat(entities.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(entities.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
|
||||
// reindex with same version
|
||||
operations.index(indexQueryBuilder.build(), index);
|
||||
@ -1883,11 +1879,11 @@ public abstract class ElasticsearchTemplateTests {
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(sampleEntities).isNotNull();
|
||||
assertThat(sampleEntities.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test // DATAES-106
|
||||
@ -2287,10 +2283,10 @@ public abstract class ElasticsearchTemplateTests {
|
||||
|
||||
// when
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
Page<SearchHit<ResultAggregator>> page = operations.searchForPage(searchQuery, ResultAggregator.class,
|
||||
SearchHits<ResultAggregator> page = operations.search(searchQuery, ResultAggregator.class,
|
||||
IndexCoordinates.of(INDEX_1_NAME, INDEX_2_NAME));
|
||||
|
||||
assertThat(page.getTotalElements()).isEqualTo(2);
|
||||
assertThat(page.getTotalHits()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -2348,9 +2344,9 @@ public abstract class ElasticsearchTemplateTests {
|
||||
// then
|
||||
// document with id "remainingDocumentId" should still be indexed
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(1);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getId()).isEqualTo(remainingDocumentId);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo(remainingDocumentId);
|
||||
}
|
||||
|
||||
@Test // DATAES-525
|
||||
@ -2379,9 +2375,9 @@ public abstract class ElasticsearchTemplateTests {
|
||||
// then
|
||||
// document with id "remainingDocumentId" should still be indexed
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(1);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getId()).isEqualTo(remainingDocumentId);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo(remainingDocumentId);
|
||||
}
|
||||
|
||||
@Test // DATAES-525
|
||||
@ -2408,9 +2404,9 @@ public abstract class ElasticsearchTemplateTests {
|
||||
// then
|
||||
// document with id "remainingDocumentId" should still be indexed
|
||||
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).build();
|
||||
Page<SearchHit<SampleEntity>> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
assertThat(sampleEntities.getTotalElements()).isEqualTo(1L);
|
||||
assertThat(sampleEntities.getContent().get(0).getContent().getId()).isEqualTo(remainingDocumentId);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1L);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getId()).isEqualTo(remainingDocumentId);
|
||||
}
|
||||
|
||||
@Test // DATAES-525
|
||||
@ -2634,14 +2630,14 @@ public abstract class ElasticsearchTemplateTests {
|
||||
.build();
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(searchQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(searchQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isEqualTo(3);
|
||||
assertThat(page.getContent()).hasSize(2);
|
||||
assertThat(page.getContent().get(0).getContent().getMessage()).isEqualTo("message 1");
|
||||
assertThat(page.getContent().get(1).getContent().getMessage()).isEqualTo("message 2");
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(3);
|
||||
assertThat(searchHits.getSearchHits()).hasSize(2);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getMessage()).isEqualTo("message 1");
|
||||
assertThat(searchHits.getSearchHit(1).getContent().getMessage()).isEqualTo("message 2");
|
||||
}
|
||||
|
||||
private IndexQuery getIndexQuery(SampleEntity sampleEntity) {
|
||||
|
@ -42,6 +42,7 @@ import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.annotations.InnerField;
|
||||
import org.springframework.data.elasticsearch.annotations.MultiField;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.ResultsExtractor;
|
||||
import org.springframework.data.elasticsearch.core.query.IndexQuery;
|
||||
@ -120,12 +121,9 @@ public class ElasticsearchTemplateAggregationTests {
|
||||
.addAggregation(terms("subjects").field("subject")) //
|
||||
.build();
|
||||
// when
|
||||
Aggregations aggregations = operations.query(searchQuery, new ResultsExtractor<Aggregations>() {
|
||||
@Override
|
||||
public Aggregations extract(SearchResponse response) {
|
||||
return response.getAggregations();
|
||||
}
|
||||
}, null, IndexCoordinates.of(INDEX_NAME).withTypes("article"));
|
||||
SearchHits<ArticleEntity> searchHits = operations.search(searchQuery, ArticleEntity.class, IndexCoordinates.of(INDEX_NAME));
|
||||
Aggregations aggregations = searchHits.getAggregations();
|
||||
|
||||
// then
|
||||
assertThat(aggregations).isNotNull();
|
||||
assertThat(aggregations.asMap().get("subjects")).isNotNull();
|
||||
|
@ -37,12 +37,12 @@ import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Version;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.elasticsearch.annotations.Document;
|
||||
import org.springframework.data.elasticsearch.annotations.Field;
|
||||
import org.springframework.data.elasticsearch.annotations.Score;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
|
||||
import org.springframework.data.elasticsearch.core.SearchHit;
|
||||
import org.springframework.data.elasticsearch.core.SearchHits;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.ElasticsearchRestTemplateConfiguration;
|
||||
import org.springframework.data.elasticsearch.junit.jupiter.SpringIntegrationTest;
|
||||
@ -137,11 +137,11 @@ public class CriteriaQueryTests {
|
||||
new Criteria("message").contains("some").or("message").contains("test"));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -168,14 +168,13 @@ public class CriteriaQueryTests {
|
||||
|
||||
// when
|
||||
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
// @Ignore("DATAES-30")
|
||||
@Test
|
||||
public void shouldPerformOrOperationWithinCriteria() {
|
||||
|
||||
@ -199,11 +198,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria().or(new Criteria("message").contains("some")));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -228,11 +227,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("some message"));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -270,11 +269,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("some message"));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().getField().getName()).isEqualTo("message");
|
||||
assertThat(page.getTotalElements()).isEqualTo(1);
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -520,12 +519,12 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").is("foo").not());
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(criteriaQuery.getCriteria().isNegating()).isTrue();
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.iterator().next().getContent().getMessage()).doesNotContain("foo");
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.iterator().next().getContent().getMessage()).doesNotContain("foo");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -606,11 +605,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(350, null));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -649,11 +648,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").between(null, 550));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -692,11 +691,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").lessThanEqual(750));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -735,11 +734,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("rate").greaterThanEqual(950));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page).isNotNull();
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits).isNotNull();
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -778,10 +777,10 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria("message").contains("foo").boost(1));
|
||||
|
||||
// when
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page.getTotalElements()).isGreaterThanOrEqualTo(1);
|
||||
assertThat(searchHits.getTotalHits()).isGreaterThanOrEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -801,11 +800,11 @@ public class CriteriaQueryTests {
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(
|
||||
new Criteria("message").contains("a").or(new Criteria("message").contains("b")));
|
||||
criteriaQuery.setMinScore(2.0F);
|
||||
Page<SearchHit<SampleEntity>> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index);
|
||||
SearchHits<SampleEntity> searchHits = operations.search(criteriaQuery, SampleEntity.class, index);
|
||||
|
||||
// then
|
||||
assertThat(page.getTotalElements()).isEqualTo(1);
|
||||
assertThat(page.getContent().get(0).getContent().getMessage()).isEqualTo("ab");
|
||||
assertThat(searchHits.getTotalHits()).isEqualTo(1);
|
||||
assertThat(searchHits.getSearchHit(0).getContent().getMessage()).isEqualTo("ab");
|
||||
}
|
||||
|
||||
@Test // DATAES-213
|
||||
|
Loading…
x
Reference in New Issue
Block a user