Skip to content

Commit f0ae721

Browse files
hobbutxhaggi
authored andcommitted
DATAES-565 - prepareScroll doesn't respect SourceFilter from the Query.
Original pull request: spring-projects#272
1 parent 7e0d0ea commit f0ae721

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchRestTemplate.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@
133133
* @author Ivan Greene
134134
* @author Christoph Strobl
135135
* @author Lorenzo Spinelli
136+
* @author Dmitriy Yakovlev
136137
*/
137138
public class ElasticsearchRestTemplate
138139
implements ElasticsearchOperations, EsClient<RestHighLevelClient>, ApplicationContextAware {
@@ -936,6 +937,11 @@ private SearchRequest prepareScroll(Query query, long scrollTimeInMillis) {
936937
searchSourceBuilder.size(query.getPageable().getPageSize());
937938
}
938939

940+
if (query.getSourceFilter() != null) {
941+
SourceFilter sourceFilter = query.getSourceFilter();
942+
searchSourceBuilder.fetchSource(sourceFilter.getIncludes(), sourceFilter.getExcludes());
943+
}
944+
939945
if (!isEmpty(query.getFields())) {
940946
searchSourceBuilder.fetchSource(toArray(query.getFields()), null);
941947
}

src/main/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplate.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
* @author Zetang Zeng
126126
* @author Ivan Greene
127127
* @author Christoph Strobl
128+
* @author Dmitriy Yakovlev
128129
*/
129130
public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<Client>, ApplicationContextAware {
130131

@@ -816,6 +817,11 @@ private SearchRequestBuilder prepareScroll(Query query, long scrollTimeInMillis)
816817
requestBuilder.setSize(query.getPageable().getPageSize());
817818
}
818819

820+
if (query.getSourceFilter() != null) {
821+
SourceFilter sourceFilter = query.getSourceFilter();
822+
requestBuilder.setFetchSource(sourceFilter.getIncludes(), sourceFilter.getExcludes());
823+
}
824+
819825
if (!isEmpty(query.getFields())) {
820826
requestBuilder.setFetchSource(toArray(query.getFields()), null);
821827
}

src/test/java/org/springframework/data/elasticsearch/core/ElasticsearchTemplateTests.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
* @author Zetang Zeng
8989
* @author Peter Nowak
9090
* @author Ivan Greene
91+
* @author Dmitriy Yakovlev
9192
*/
9293

9394
@Ignore
@@ -2686,6 +2687,37 @@ public void shouldApplySearchQueryToScanAndScrollForGivenSearchQuery() {
26862687
not(contains(notFindableMessage)));
26872688
}
26882689

2690+
@Test // DATAES-565
2691+
public void shouldRespectSourceFilterWithScanAndScrollForGivenSearchQuery() {
2692+
//given
2693+
List<IndexQuery> entities = createSampleEntitiesWithMessage("Test message", 3);
2694+
// when
2695+
elasticsearchTemplate.bulkIndex(entities);
2696+
elasticsearchTemplate.refresh(SampleEntity.class);
2697+
// then
2698+
2699+
SourceFilter sourceFilter = new FetchSourceFilter(new String[]{"id"}, new String[]{});
2700+
2701+
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withIndices(INDEX_NAME)
2702+
.withTypes(TYPE_NAME).withPageable(PageRequest.of(0, 10))
2703+
.withSourceFilter(sourceFilter)
2704+
.build();
2705+
2706+
ScrolledPage<SampleEntity> scroll = (ScrolledPage<SampleEntity>) elasticsearchTemplate.startScroll(1000, searchQuery, SampleEntity.class);
2707+
List<SampleEntity> sampleEntities = new ArrayList<>();
2708+
while (scroll.hasContent()) {
2709+
sampleEntities.addAll(scroll.getContent());
2710+
scroll = (ScrolledPage<SampleEntity>) elasticsearchTemplate.continueScroll(scroll.getScrollId() , 1000, SampleEntity.class);
2711+
}
2712+
elasticsearchTemplate.clearScroll(scroll.getScrollId());
2713+
assertThat(sampleEntities.size(), is(equalTo(3)));
2714+
assertThat(sampleEntities.stream().map(SampleEntity::getId).collect(Collectors.toList()),
2715+
everyItem(notNullValue()));
2716+
assertThat(sampleEntities.stream().map(SampleEntity::getMessage).collect(Collectors.toList()),
2717+
everyItem(nullValue()));
2718+
}
2719+
2720+
26892721
private IndexQuery getIndexQuery(SampleEntity sampleEntity) {
26902722
return new IndexQueryBuilder()
26912723
.withId(sampleEntity.getId())

0 commit comments

Comments
 (0)