DATAES-713 - Add returned aggregations from the AggregatedPage to the SearchHits.

Original PR: #365
This commit is contained in:
Peter-Josef Meisch 2019-12-26 20:14:04 +01:00 committed by GitHub
parent b634f318ab
commit d2b7df87f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 384 additions and 346 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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();

View File

@ -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());
}
}

View File

@ -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
}

View File

@ -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.

View File

@ -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();

View File

@ -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}.
*/

View File

@ -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();

View File

@ -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()) {

View File

@ -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());

View File

@ -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

View File

@ -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

View File

@ -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) {

View File

@ -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();

View File

@ -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