mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-17 09:32:11 +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 Ivan Greene
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
* @author Lorenzo Spinelli
|
* @author Lorenzo Spinelli
|
||||||
|
* @author Dmitriy Yakovlev
|
||||||
*/
|
*/
|
||||||
public class ElasticsearchRestTemplate
|
public class ElasticsearchRestTemplate
|
||||||
implements ElasticsearchOperations, EsClient<RestHighLevelClient>, ApplicationContextAware {
|
implements ElasticsearchOperations, EsClient<RestHighLevelClient>, ApplicationContextAware {
|
||||||
@ -936,6 +937,11 @@ public class ElasticsearchRestTemplate
|
|||||||
searchSourceBuilder.size(query.getPageable().getPageSize());
|
searchSourceBuilder.size(query.getPageable().getPageSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (query.getSourceFilter() != null) {
|
||||||
|
SourceFilter sourceFilter = query.getSourceFilter();
|
||||||
|
searchSourceBuilder.fetchSource(sourceFilter.getIncludes(), sourceFilter.getExcludes());
|
||||||
|
}
|
||||||
|
|
||||||
if (!isEmpty(query.getFields())) {
|
if (!isEmpty(query.getFields())) {
|
||||||
searchSourceBuilder.fetchSource(toArray(query.getFields()), null);
|
searchSourceBuilder.fetchSource(toArray(query.getFields()), null);
|
||||||
}
|
}
|
||||||
|
@ -125,6 +125,7 @@ import org.springframework.util.StringUtils;
|
|||||||
* @author Zetang Zeng
|
* @author Zetang Zeng
|
||||||
* @author Ivan Greene
|
* @author Ivan Greene
|
||||||
* @author Christoph Strobl
|
* @author Christoph Strobl
|
||||||
|
* @author Dmitriy Yakovlev
|
||||||
*/
|
*/
|
||||||
public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<Client>, ApplicationContextAware {
|
public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<Client>, ApplicationContextAware {
|
||||||
|
|
||||||
@ -816,6 +817,11 @@ public class ElasticsearchTemplate implements ElasticsearchOperations, EsClient<
|
|||||||
requestBuilder.setSize(query.getPageable().getPageSize());
|
requestBuilder.setSize(query.getPageable().getPageSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (query.getSourceFilter() != null) {
|
||||||
|
SourceFilter sourceFilter = query.getSourceFilter();
|
||||||
|
requestBuilder.setFetchSource(sourceFilter.getIncludes(), sourceFilter.getExcludes());
|
||||||
|
}
|
||||||
|
|
||||||
if (!isEmpty(query.getFields())) {
|
if (!isEmpty(query.getFields())) {
|
||||||
requestBuilder.setFetchSource(toArray(query.getFields()), null);
|
requestBuilder.setFetchSource(toArray(query.getFields()), null);
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,7 @@ import org.springframework.data.util.CloseableIterator;
|
|||||||
* @author Zetang Zeng
|
* @author Zetang Zeng
|
||||||
* @author Peter Nowak
|
* @author Peter Nowak
|
||||||
* @author Ivan Greene
|
* @author Ivan Greene
|
||||||
|
* @author Dmitriy Yakovlev
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Ignore
|
@Ignore
|
||||||
@ -2686,6 +2687,37 @@ public class ElasticsearchTemplateTests {
|
|||||||
not(contains(notFindableMessage)));
|
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) {
|
private IndexQuery getIndexQuery(SampleEntity sampleEntity) {
|
||||||
return new IndexQueryBuilder()
|
return new IndexQueryBuilder()
|
||||||
.withId(sampleEntity.getId())
|
.withId(sampleEntity.getId())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user