diff --git a/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java index 84c81a703..3adf37130 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/AbstractElasticsearchTemplate.java @@ -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 AggregatedPage> search(MoreLikeThisQuery query, Class clazz, IndexCoordinates index) { + public SearchHits search(MoreLikeThisQuery query, Class 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 List>> multiSearchForPage(List queries, Class clazz, - IndexCoordinates index) { + public List> multiSearch(List queries, Class 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> 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>> multiSearchForPage(List queries, - List> classes, IndexCoordinates index) { + public List> multiSearch(List queries, List> classes, + IndexCoordinates index) { MultiSearchRequest request = new MultiSearchRequest(); Iterator> it = classes.iterator(); for (Query query : queries) { request.add(requestFactory.searchRequest(query, it.next(), index)); } - return doMultiSearch(queries, classes, request); - } - private List>> doMultiSearch(List queries, Class clazz, - MultiSearchRequest request) { MultiSearchResponse.Item[] items = getMultiSearchResult(request); - List>> 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>> doMultiSearch(List queries, - List> classes, MultiSearchRequest request) { - MultiSearchResponse.Item[] items = getMultiSearchResult(request); - List>> res = new ArrayList<>(queries.size()); + List> res = new ArrayList<>(queries.size()); int c = 0; - Iterator> it = classes.iterator(); + Iterator> 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; } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java index 29c51ba63..bbe47971b 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java @@ -226,19 +226,7 @@ public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate { } @Override - public T query(Query query, ResultsExtractor resultsExtractor, @Nullable Class 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 AggregatedPage> searchForPage(Query query, Class clazz, IndexCoordinates index) { + public SearchHits search(Query query, Class 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 diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java index 03499348f..c282b1197 100755 --- a/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java @@ -196,17 +196,10 @@ public class ElasticsearchTemplate extends AbstractElasticsearchTemplate { } @Override - public T query(Query query, ResultsExtractor resultsExtractor, Class clazz, IndexCoordinates index) { + public SearchHits search(Query query, Class clazz, IndexCoordinates index) { SearchRequestBuilder searchRequestBuilder = requestFactory.searchRequestBuilder(client, query, clazz, index); SearchResponse response = getSearchResponse(searchRequestBuilder); - return resultsExtractor.extract(response); - } - - @Override - public AggregatedPage> searchForPage(Query query, Class 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 diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ScoredPage.java b/src/main/java/org/springframework/data/elasticsearch/core/ScoredPage.java index 49402140a..a444f2d6c 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ScoredPage.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ScoredPage.java @@ -22,7 +22,9 @@ import org.springframework.data.domain.Page; * * @param * @author Sascha Woo + * @deprecated since 4.0, use {@link org.springframework.data.elasticsearch.core.SearchHits} to return values. */ +@Deprecated public interface ScoredPage extends Page { float getMaxScore(); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java b/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java index 44854e460..6dda54ba5 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/SearchHitSupport.java @@ -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 AggregatedPage> page(SearchHits searchHits, Pageable pageable) { + return new AggregatedPageImpl<>(searchHits.getSearchHits(), pageable, searchHits.getTotalHits(), + searchHits.getAggregations(), searchHits.getScrollId(), searchHits.getMaxScore()); + } } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/SearchHits.java b/src/main/java/org/springframework/data/elasticsearch/core/SearchHits.java index ec36780af..3591078b3 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/SearchHits.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/SearchHits.java @@ -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 implements Streamable> { - private final List> searchHits; private final long totalHits; private final float maxScore; + private final String scrollId; + private final List> 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> searchHits, long totalHits, float maxScore) { - this.totalHits = totalHits; - this.maxScore = maxScore; + public SearchHits(long totalHits, float maxScore, @Nullable String scrollId, List> 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 implements Streamable> { return (Iterator>) 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> 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 implements Streamable> { @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 + } diff --git a/src/main/java/org/springframework/data/elasticsearch/core/SearchOperations.java b/src/main/java/org/springframework/data/elasticsearch/core/SearchOperations.java index e47981111..0165c04af 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/SearchOperations.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/SearchOperations.java @@ -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 query(Query query, ResultsExtractor resultsExtractor, Class 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 AggregatedPage queryForPage(Query query, Class clazz, IndexCoordinates index) { - return (AggregatedPage) SearchHitSupport.unwrapSearchHits(searchForPage(query, clazz, index)); + SearchHits searchHits = search(query, clazz, index); + AggregatedPage> aggregatedPage = SearchHitSupport.page(searchHits, query.getPageable()); + return (AggregatedPage) 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 List> queryForPage(List queries, Class clazz, IndexCoordinates index) { - return multiSearchForPage(queries, clazz, index).stream() // - .map(page -> (Page) SearchHitSupport.unwrapSearchHits(page)) // - .collect(Collectors.toList()); + List> pageList = new ArrayList<>(); + List> searchHitsList = multiSearch(queries, clazz, index); + Iterator qit = queries.iterator(); + searchHitsList.forEach(searchHits -> { + AggregatedPage> aggregatedPage = SearchHitSupport.page(searchHits, qit.next().getPageable()); + Page page = (Page) 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> queryForPage(List queries, List> classes, IndexCoordinates index) { - return multiSearchForPage(queries, classes, index).stream() // - .map(page -> (AggregatedPage) SearchHitSupport.unwrapSearchHits(page)) // - .collect(Collectors.toList()); + List> pageList = new ArrayList<>(); + List> searchHitsList = multiSearch(queries, classes, index); + Iterator qit = queries.iterator(); + searchHitsList.forEach(searchHits -> { + AggregatedPage> 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 ScrolledPage continueScroll(@Nullable String scrollId, long scrollTimeInMillis, Class clazz) { @@ -250,8 +266,11 @@ public interface SearchOperations { */ @Deprecated default AggregatedPage moreLikeThis(MoreLikeThisQuery query, Class clazz, IndexCoordinates index) { - return (AggregatedPage) SearchHitSupport.unwrapSearchHits(search(query, clazz, index)); + SearchHits searchHits = search(query, clazz, index); + AggregatedPage> aggregatedPage = SearchHitSupport.page(searchHits, query.getPageable()); + return (AggregatedPage) SearchHitSupport.unwrapSearchHits(aggregatedPage); } + // endregion /** * Execute the query against elasticsearch and return the first returned object. @@ -263,41 +282,30 @@ public interface SearchOperations { */ @Nullable default SearchHit searchOne(Query query, Class clazz, IndexCoordinates index) { - List> content = searchForPage(query, clazz, index).getContent(); + List> 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 element return type + * @return list of SearchHits */ - AggregatedPage> searchForPage(Query query, Class clazz, IndexCoordinates index); + List> multiSearch(List queries, Class 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 */ - List>> multiSearchForPage(List queries, Class 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>> multiSearchForPage(List queries, List> classes, - IndexCoordinates index); + List> multiSearch(List queries, List> 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 SearchHits search(Query query, Class clazz, IndexCoordinates index) { - AggregatedPage> 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 element return type - * @return list of SearchHits - */ - default List> multiSearch(List queries, Class clazz, IndexCoordinates index) { - return multiSearchForPage(queries, clazz, index).stream() - .map(page -> new SearchHits(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> multiSearch(List queries, List> classes, IndexCoordinates index) { - List> searchHitsList = new ArrayList<>(); - multiSearchForPage(queries, classes, index).forEach(page -> { - searchHitsList.add(new SearchHits(page.getContent(), page.getTotalElements(), page.getMaxScore())); - }); - return searchHitsList; - } + SearchHits search(Query query, Class 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 */ - AggregatedPage> search(MoreLikeThisQuery query, Class clazz, IndexCoordinates index); + SearchHits search(MoreLikeThisQuery query, Class clazz, IndexCoordinates index); /** * Returns scrolled page for given query @@ -377,7 +350,7 @@ public interface SearchOperations { * @return scrolled page result */ ScrolledPage> searchScrollContinue(@Nullable String scrollId, long scrollTimeInMillis, - Class clazz); + Class clazz); /** * Clears the search contexts associated with specified scroll ids. diff --git a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java index 617b0ddb3..086845c92 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/aggregation/AggregatedPage.java @@ -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 extends ScrolledPage, ScoredPage { boolean hasAggregations(); diff --git a/src/main/java/org/springframework/data/elasticsearch/core/convert/ElasticsearchConverter.java b/src/main/java/org/springframework/data/elasticsearch/core/convert/ElasticsearchConverter.java index 216e376fe..e377d8962 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/convert/ElasticsearchConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/convert/ElasticsearchConverter.java @@ -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 mapDocument(@Nullable Document document, Class 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 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 + */ + SearchHits read(Class type, SearchDocumentResponse searchDocumentResponse); + + /** + * builds a {@link SearchHit} from a {@link SearchDocument}. + * + * @param 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}. */ diff --git a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java index d209077dc..2a7243d47 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/convert/MappingElasticsearchConverter.java @@ -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 doRead(Document source, TypeInformation typeHint) { - - if (source == null) { - return null; - } - typeHint = (TypeInformation) typeMapper.readType(source, typeHint); if (conversions.hasCustomReadTarget(Map.class, typeHint.getType())) { @@ -597,8 +603,28 @@ public class MappingElasticsearchConverter : type.cast(mappedResult); } + @Override + public SearchHits read(Class 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> searchHits = searchDocumentResponse.getSearchDocuments().stream() // + .map(searchDocument -> read(type, searchDocument)) // + .collect(Collectors.toList()); + Aggregations aggregations = searchDocumentResponse.getAggregations(); + return new SearchHits(totalHits, maxScore, scrollId, searchHits, aggregations); + } + @Override public SearchHit read(Class 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(); diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java index a750e022d..d2b870e09 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java @@ -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()) { diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java index 48a79e93d..79348e9c0 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java @@ -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()); diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java index f4f156cb8..04437b862 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/support/AbstractElasticsearchRepository.java @@ -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 implements Elastics @Override public Page findAll(Pageable pageable) { NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withPageable(pageable).build(); - AggregatedPage> page = operations.searchForPage(query, getEntityClass(), getIndexCoordinates()); - return unwrapSearchHits(page); + SearchHits searchHits = operations.search(query, getEntityClass(), getIndexCoordinates()); + AggregatedPage> page = SearchHitSupport.page(searchHits, query.getPageable()); + return (Page) SearchHitSupport.unwrapSearchHits(page); } @Override @@ -152,12 +154,9 @@ public abstract class AbstractElasticsearchRepository implements Elastics } NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) .withPageable(PageRequest.of(0, itemCount, sort)).build(); - AggregatedPage> page = operations.searchForPage(query, getEntityClass(), getIndexCoordinates()); - return unwrapSearchHits(page); - } - - private Page unwrapSearchHits(AggregatedPage> page) { - return (Page) SearchHitSupport.unwrapSearchHits(page); + List> searchHitList = operations.search(query, getEntityClass(), getIndexCoordinates()) + .getSearchHits(); + return (List) SearchHitSupport.unwrapSearchHits(searchHitList); } @Override @@ -226,21 +225,24 @@ public abstract class AbstractElasticsearchRepository implements Elastics return new PageImpl<>(Collections. emptyList()); } searchQuery.setPageable(PageRequest.of(0, count)); - AggregatedPage> page = operations.searchForPage(searchQuery, getEntityClass(), getIndexCoordinates()); - return unwrapSearchHits(page); + SearchHits searchHits = operations.search(searchQuery, getEntityClass(), getIndexCoordinates()); + AggregatedPage> page = SearchHitSupport.page(searchHits, searchQuery.getPageable()); + return (Page) SearchHitSupport.unwrapSearchHits(page); } @Override public Page search(QueryBuilder query, Pageable pageable) { NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(query).withPageable(pageable).build(); - AggregatedPage> page = operations.searchForPage(searchQuery, getEntityClass(), getIndexCoordinates()); - return unwrapSearchHits(page); + SearchHits searchHits = operations.search(searchQuery, getEntityClass(), getIndexCoordinates()); + AggregatedPage> page = SearchHitSupport.page(searchHits, searchQuery.getPageable()); + return (Page) SearchHitSupport.unwrapSearchHits(page); } @Override public Page search(Query query) { - AggregatedPage> page = operations.searchForPage(query, getEntityClass(), getIndexCoordinates()); - return unwrapSearchHits(page); + SearchHits searchHits = operations.search(query, getEntityClass(), getIndexCoordinates()); + AggregatedPage> page = SearchHitSupport.page(searchHits, query.getPageable()); + return (Page) SearchHitSupport.unwrapSearchHits(page); } @Override @@ -255,8 +257,9 @@ public abstract class AbstractElasticsearchRepository implements Elastics query.addFields(fields); } - AggregatedPage> page = operations.search(query, getEntityClass(), getIndexCoordinates()); - return unwrapSearchHits(page); + SearchHits searchHits = operations.search(query, getEntityClass(), getIndexCoordinates()); + AggregatedPage> page = SearchHitSupport.page(searchHits, pageable); + return (Page) SearchHitSupport.unwrapSearchHits(page); } @Override diff --git a/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java b/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java index 566ac5055..29c6f3644 100644 --- a/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/NestedObjectTests.java @@ -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> personIndexed = elasticsearchTemplate.searchForPage(searchQuery, + SearchHits 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 createPerson() { @@ -381,10 +378,10 @@ public class NestedObjectTests { // then NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() .withQuery(nestedQuery("buckets", termQuery("buckets.1", "test3"), ScoreMode.None)).build(); - AggregatedPage> books = elasticsearchTemplate.searchForPage(searchQuery, Book.class, index); + SearchHits 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 diff --git a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java index aab98f596..4f4b7cefb 100755 --- a/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java @@ -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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQueryWithValidPreference, - SampleEntity.class, index); + SearchHits 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> entities = operations.searchForPage(searchQuery, SampleEntity.class, + + // when + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(2); + + // when + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(0); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(0); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(0); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(stringQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(stringQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(stringQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.search(moreLikeThisQuery, SampleEntity.class, index); + SearchHits searchHits = operations.search(moreLikeThisQuery, SampleEntity.class, index); // then - assertThat(sampleEntities.getTotalElements()).isEqualTo(1); - List content = sampleEntities.getContent().stream().map(SearchHit::getContent) + assertThat(searchHits.getTotalHits()).isEqualTo(1); + List 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>> sampleEntities = operations.multiSearchForPage(queries, - SampleEntity.class, index); - for (Page> sampleEntity : sampleEntities) { - assertThat(sampleEntity.getTotalElements()).isEqualTo(1); + List> searchHits = operations.multiSearch(queries, SampleEntity.class, index); + for (SearchHits 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>> pages = operations.multiSearchForPage(queries, - Lists.newArrayList(SampleEntity.class, clazz), + List> 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 searchHit0 = (SearchHit) page0.getContent().get(0); + SearchHits searchHits0 = searchHitsList.get(0); + assertThat(searchHits0.getTotalHits()).isEqualTo(1L); + SearchHit searchHit0 = (SearchHit) searchHits0.getSearchHit(0); assertThat(searchHit0.getContent().getClass()).isEqualTo(SampleEntity.class); - Page page1 = pages.get(1); - assertThat(page1.getTotalElements()).isEqualTo(1L); - SearchHit searchHit1 = (SearchHit) page1.getContent().get(0); + SearchHits searchHits1 = searchHitsList.get(1); + assertThat(searchHits1.getTotalHits()).isEqualTo(1L); + SearchHit searchHit1 = (SearchHit) 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(0); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); + assertThat(searchHits.getTotalHits()).isEqualTo(0); } @Test @@ -1649,10 +1647,10 @@ public abstract class ElasticsearchTemplateTests { .build(); // then - Page> 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 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> page = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(2); + SearchHits searchHits = operations.search(searchQuery, SampleEntity.class, index); - List> 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> sampleEntities = operations.searchForPage(searchQuery, Map.class, index); + SearchHits searchHits = operations.search(searchQuery, Map.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(2); - List> 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> entities = operations.searchForPage(searchQuery, GTEVersionEntity.class, index); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(searchQuery, ResultAggregator.class, + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(1); - assertThat(sampleEntities.getContent().get(0).getContent().getId()).isEqualTo(remainingDocumentId); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(1); - assertThat(sampleEntities.getContent().get(0).getContent().getId()).isEqualTo(remainingDocumentId); + SearchHits 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> sampleEntities = operations.searchForPage(searchQuery, SampleEntity.class, index); - assertThat(sampleEntities.getTotalElements()).isEqualTo(1L); - assertThat(sampleEntities.getContent().get(0).getContent().getId()).isEqualTo(remainingDocumentId); + SearchHits 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> page = operations.searchForPage(searchQuery, SampleEntity.class, index); + SearchHits 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) { diff --git a/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java index f05a43000..a8db95146 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/aggregation/ElasticsearchTemplateAggregationTests.java @@ -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() { - @Override - public Aggregations extract(SearchResponse response) { - return response.getAggregations(); - } - }, null, IndexCoordinates.of(INDEX_NAME).withTypes("article")); + SearchHits searchHits = operations.search(searchQuery, ArticleEntity.class, IndexCoordinates.of(INDEX_NAME)); + Aggregations aggregations = searchHits.getAggregations(); + // then assertThat(aggregations).isNotNull(); assertThat(aggregations.asMap().get("subjects")).isNotNull(); diff --git a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java index ade03dcb9..bc206b2d1 100644 --- a/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java +++ b/src/test/java/org/springframework/data/elasticsearch/core/query/CriteriaQueryTests.java @@ -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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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> page = operations.searchForPage(criteriaQuery, SampleEntity.class, index); + SearchHits 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