mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-12 07:02:10 +00:00
DATAES-565 - prepareScroll doesn't respect SourceFilter from the Query.
Original pull request: #272
This commit is contained in:
parent
7e0d0ea2c0
commit
f0ae72141f
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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())
|
||||
|
Loading…
x
Reference in New Issue
Block a user