DATAES-565 - prepareScroll doesn't respect SourceFilter from the Query.

Original pull request: #272
This commit is contained in:
Dmitriy Yakovlev 2019-04-18 07:52:58 +03:00 committed by xhaggi
parent 7e0d0ea2c0
commit f0ae72141f
3 changed files with 44 additions and 0 deletions

View File

@ -133,6 +133,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
* @author Ivan Greene
* @author Christoph Strobl
* @author Lorenzo Spinelli
* @author Dmitriy Yakovlev
*/
public class ElasticsearchRestTemplate
implements ElasticsearchOperations, EsClient<RestHighLevelClient>, ApplicationContextAware {
@ -936,6 +937,11 @@ public class ElasticsearchRestTemplate
searchSourceBuilder.size(query.getPageable().getPageSize());
}
if (query.getSourceFilter() != null) {
SourceFilter sourceFilter = query.getSourceFilter();
searchSourceBuilder.fetchSource(sourceFilter.getIncludes(), sourceFilter.getExcludes());
}
if (!isEmpty(query.getFields())) {
searchSourceBuilder.fetchSource(toArray(query.getFields()), null);
}

View File

@ -125,6 +125,7 @@ import org.springframework.util.StringUtils;
* @author Zetang Zeng
* @author Ivan Greene
* @author Christoph Strobl
* @author Dmitriy Yakovlev
*/
public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<Client>, ApplicationContextAware {
@ -816,6 +817,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<
requestBuilder.setSize(query.getPageable().getPageSize());
}
if (query.getSourceFilter() != null) {
SourceFilter sourceFilter = query.getSourceFilter();
requestBuilder.setFetchSource(sourceFilter.getIncludes(), sourceFilter.getExcludes());
}
if (!isEmpty(query.getFields())) {
requestBuilder.setFetchSource(toArray(query.getFields()), null);
}

View File

@ -88,6 +88,7 @@ import org.springframework.data.util.CloseableIterator;
* @author Zetang Zeng
* @author Peter Nowak
* @author Ivan Greene
* @author Dmitriy Yakovlev
*/
@Ignore
@ -2686,6 +2687,37 @@ public class ElasticsearchTemplateTests {
not(contains(notFindableMessage)));
}
@Test // DATAES-565
public void shouldRespectSourceFilterWithScanAndScrollForGivenSearchQuery() {
//given
List<IndexQuery> entities = createSampleEntitiesWithMessage("Test message", 3);
// when
elasticsearchTemplate.bulkIndex(entities);
elasticsearchTemplate.refresh(SampleEntity.class);
// then
SourceFilter sourceFilter = new FetchSourceFilter(new String[]{"id"}, new String[]{});
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withIndices(INDEX_NAME)
.withTypes(TYPE_NAME).withPageable(PageRequest.of(0, 10))
.withSourceFilter(sourceFilter)
.build();
ScrolledPage<SampleEntity> scroll = (ScrolledPage<SampleEntity>) elasticsearchTemplate.startScroll(1000, searchQuery, SampleEntity.class);
List<SampleEntity> sampleEntities = new ArrayList<>();
while (scroll.hasContent()) {
sampleEntities.addAll(scroll.getContent());
scroll = (ScrolledPage<SampleEntity>) elasticsearchTemplate.continueScroll(scroll.getScrollId() , 1000, SampleEntity.class);
}
elasticsearchTemplate.clearScroll(scroll.getScrollId());
assertThat(sampleEntities.size(), is(equalTo(3)));
assertThat(sampleEntities.stream().map(SampleEntity::getId).collect(Collectors.toList()),
everyItem(notNullValue()));
assertThat(sampleEntities.stream().map(SampleEntity::getMessage).collect(Collectors.toList()),
everyItem(nullValue()));
}
private IndexQuery getIndexQuery(SampleEntity sampleEntity) {
return new IndexQueryBuilder()
.withId(sampleEntity.getId())