DATAES-831 - SearchOperations.searchForStream does not use requested maxResults.
Original PR: #459
This commit is contained in:
committed by
GitHub
parent
391e240b49
commit
506f79a45a
@@ -77,7 +77,7 @@ import org.springframework.data.elasticsearch.annotations.ScriptedField;
|
||||
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
|
||||
import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
|
||||
import org.springframework.data.elasticsearch.core.query.*;
|
||||
import org.springframework.data.util.CloseableIterator;
|
||||
import org.springframework.data.util.StreamUtils;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
@@ -1298,27 +1298,33 @@ public abstract class ElasticsearchTemplateTests {
|
||||
assertThat(sampleEntities).hasSize(30);
|
||||
}
|
||||
|
||||
@Test // DATAES-167
|
||||
public void shouldReturnResultsWithStreamForGivenCriteriaQuery() {
|
||||
@Test // DATAES-167, DATAES-831
|
||||
public void shouldReturnAllResultsWithStreamForGivenCriteriaQuery() {
|
||||
|
||||
// given
|
||||
List<IndexQuery> entities = createSampleEntitiesWithMessage("Test message", 30);
|
||||
|
||||
// when
|
||||
operations.bulkIndex(entities, index);
|
||||
operations.bulkIndex(createSampleEntitiesWithMessage("Test message", 30), index);
|
||||
indexOperations.refresh();
|
||||
|
||||
// then
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria());
|
||||
criteriaQuery.setPageable(PageRequest.of(0, 10));
|
||||
|
||||
CloseableIterator<SearchHit<SampleEntity>> stream = operations.searchForStream(criteriaQuery, SampleEntity.class,
|
||||
index);
|
||||
List<SearchHit<SampleEntity>> sampleEntities = new ArrayList<>();
|
||||
while (stream.hasNext()) {
|
||||
sampleEntities.add(stream.next());
|
||||
}
|
||||
assertThat(sampleEntities).hasSize(30);
|
||||
long count = StreamUtils
|
||||
.createStreamFromIterator(operations.searchForStream(criteriaQuery, SampleEntity.class, index)).count();
|
||||
|
||||
assertThat(count).isEqualTo(30);
|
||||
}
|
||||
|
||||
@Test // DATAES-831
|
||||
void shouldLimitStreamResultToRequestedSize() {
|
||||
|
||||
operations.bulkIndex(createSampleEntitiesWithMessage("Test message", 30), index);
|
||||
indexOperations.refresh();
|
||||
|
||||
CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria());
|
||||
criteriaQuery.setMaxResults(10);
|
||||
|
||||
long count = StreamUtils
|
||||
.createStreamFromIterator(operations.searchForStream(criteriaQuery, SampleEntity.class, index)).count();
|
||||
|
||||
assertThat(count).isEqualTo(10);
|
||||
}
|
||||
|
||||
private static List<IndexQuery> createSampleEntitiesWithMessage(String message, int numberOfEntities) {
|
||||
@@ -3128,8 +3134,8 @@ public abstract class ElasticsearchTemplateTests {
|
||||
operations.refresh(OptimisticEntity.class);
|
||||
|
||||
List<Query> queries = singletonList(queryForOne(saved.getId()));
|
||||
List<SearchHits<OptimisticEntity>> retrievedHits = operations.multiSearch(queries,
|
||||
OptimisticEntity.class, operations.getIndexCoordinatesFor(OptimisticEntity.class));
|
||||
List<SearchHits<OptimisticEntity>> retrievedHits = operations.multiSearch(queries, OptimisticEntity.class,
|
||||
operations.getIndexCoordinatesFor(OptimisticEntity.class));
|
||||
OptimisticEntity retrieved = retrievedHits.get(0).getSearchHit(0).getContent();
|
||||
|
||||
assertThatSeqNoPrimaryTermIsFilled(retrieved);
|
||||
@@ -3162,8 +3168,7 @@ public abstract class ElasticsearchTemplateTests {
|
||||
operations.save(forEdit1);
|
||||
|
||||
forEdit2.setMessage("It'll be great");
|
||||
assertThatThrownBy(() -> operations.save(forEdit2))
|
||||
.isInstanceOf(OptimisticLockingFailureException.class);
|
||||
assertThatThrownBy(() -> operations.save(forEdit2)).isInstanceOf(OptimisticLockingFailureException.class);
|
||||
}
|
||||
|
||||
@Test // DATAES-799
|
||||
@@ -3179,8 +3184,7 @@ public abstract class ElasticsearchTemplateTests {
|
||||
operations.save(forEdit1);
|
||||
|
||||
forEdit2.setMessage("It'll be great");
|
||||
assertThatThrownBy(() -> operations.save(forEdit2))
|
||||
.isInstanceOf(OptimisticLockingFailureException.class);
|
||||
assertThatThrownBy(() -> operations.save(forEdit2)).isInstanceOf(OptimisticLockingFailureException.class);
|
||||
}
|
||||
|
||||
@Test // DATAES-799
|
||||
|
||||
@@ -25,6 +25,7 @@ import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.data.util.StreamUtils;
|
||||
|
||||
/**
|
||||
* @author Sascha Woo
|
||||
@@ -45,6 +46,7 @@ public class StreamQueriesTest {
|
||||
|
||||
// when
|
||||
SearchHitsIterator<String> iterator = StreamQueries.streamResults( //
|
||||
0, //
|
||||
searchHits, //
|
||||
scrollId -> newSearchScrollHits(Collections.emptyList(), scrollId), //
|
||||
scrollIds -> clearScrollCalled.set(true));
|
||||
@@ -70,6 +72,7 @@ public class StreamQueriesTest {
|
||||
|
||||
// when
|
||||
SearchHitsIterator<String> iterator = StreamQueries.streamResults( //
|
||||
0, //
|
||||
searchHits, //
|
||||
scrollId -> newSearchScrollHits(Collections.emptyList(), scrollId), //
|
||||
scrollId -> {});
|
||||
@@ -90,10 +93,12 @@ public class StreamQueriesTest {
|
||||
Collections.singletonList(new SearchHit<String>(null, 0, null, null, "one")), "s-2");
|
||||
SearchScrollHits<String> searchHits4 = newSearchScrollHits(Collections.emptyList(), "s-3");
|
||||
|
||||
Iterator<SearchScrollHits<String>> searchScrollHitsIterator = Arrays.asList(searchHits1, searchHits2, searchHits3,searchHits4).iterator();
|
||||
Iterator<SearchScrollHits<String>> searchScrollHitsIterator = Arrays
|
||||
.asList(searchHits1, searchHits2, searchHits3, searchHits4).iterator();
|
||||
|
||||
List<String> clearedScrollIds = new ArrayList<>();
|
||||
SearchHitsIterator<String> iterator = StreamQueries.streamResults( //
|
||||
0, //
|
||||
searchScrollHitsIterator.next(), //
|
||||
scrollId -> searchScrollHitsIterator.next(), //
|
||||
scrollIds -> clearedScrollIds.addAll(scrollIds));
|
||||
@@ -106,6 +111,56 @@ public class StreamQueriesTest {
|
||||
assertThat(clearedScrollIds).isEqualTo(Arrays.asList("s-1", "s-2", "s-3"));
|
||||
}
|
||||
|
||||
@Test // DATAES-831
|
||||
void shouldReturnAllForRequestedSizeOf0() {
|
||||
|
||||
SearchScrollHits<String> searchHits1 = newSearchScrollHits(
|
||||
Collections.singletonList(new SearchHit<String>(null, 0, null, null, "one")), "s-1");
|
||||
SearchScrollHits<String> searchHits2 = newSearchScrollHits(
|
||||
Collections.singletonList(new SearchHit<String>(null, 0, null, null, "one")), "s-2");
|
||||
SearchScrollHits<String> searchHits3 = newSearchScrollHits(
|
||||
Collections.singletonList(new SearchHit<String>(null, 0, null, null, "one")), "s-2");
|
||||
SearchScrollHits<String> searchHits4 = newSearchScrollHits(Collections.emptyList(), "s-3");
|
||||
|
||||
Iterator<SearchScrollHits<String>> searchScrollHitsIterator = Arrays
|
||||
.asList(searchHits1, searchHits2, searchHits3, searchHits4).iterator();
|
||||
|
||||
SearchHitsIterator<String> iterator = StreamQueries.streamResults( //
|
||||
0, //
|
||||
searchScrollHitsIterator.next(), //
|
||||
scrollId -> searchScrollHitsIterator.next(), //
|
||||
scrollIds -> {});
|
||||
|
||||
long count = StreamUtils.createStreamFromIterator(iterator).count();
|
||||
|
||||
assertThat(count).isEqualTo(3);
|
||||
}
|
||||
|
||||
@Test // DATAES-831
|
||||
void shouldOnlyReturnRequestedCount() {
|
||||
|
||||
SearchScrollHits<String> searchHits1 = newSearchScrollHits(
|
||||
Collections.singletonList(new SearchHit<String>(null, 0, null, null, "one")), "s-1");
|
||||
SearchScrollHits<String> searchHits2 = newSearchScrollHits(
|
||||
Collections.singletonList(new SearchHit<String>(null, 0, null, null, "one")), "s-2");
|
||||
SearchScrollHits<String> searchHits3 = newSearchScrollHits(
|
||||
Collections.singletonList(new SearchHit<String>(null, 0, null, null, "one")), "s-2");
|
||||
SearchScrollHits<String> searchHits4 = newSearchScrollHits(Collections.emptyList(), "s-3");
|
||||
|
||||
Iterator<SearchScrollHits<String>> searchScrollHitsIterator = Arrays
|
||||
.asList(searchHits1, searchHits2, searchHits3, searchHits4).iterator();
|
||||
|
||||
SearchHitsIterator<String> iterator = StreamQueries.streamResults( //
|
||||
2, //
|
||||
searchScrollHitsIterator.next(), //
|
||||
scrollId -> searchScrollHitsIterator.next(), //
|
||||
scrollIds -> {});
|
||||
|
||||
long count = StreamUtils.createStreamFromIterator(iterator).count();
|
||||
|
||||
assertThat(count).isEqualTo(2);
|
||||
}
|
||||
|
||||
private SearchScrollHits<String> newSearchScrollHits(List<SearchHit<String>> hits, String scrollId) {
|
||||
return new SearchHitsImpl<String>(hits.size(), TotalHitsRelation.EQUAL_TO, 0, scrollId, hits, null);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user