ElastichSearchRestTemplate 忽略可分页
ElastichSearchRestTemplate ignoring pageable
我想通过 Spring-Data-ElasticSearch 从 ElasticSearch 中读取大量 (>15000) 个条目。
为此,我遵循了这个文档:
https://docs.spring.io/spring-data/elasticsearch/docs/3.2.6.RELEASE/reference/html/#elasticsearch.scroll
我只复制了文档提供的代码片段,除了 searchQuery:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withPageable(PageRequest.of(0, 10))
.build();
CloseableIterator<SampleEntity> stream = elasticsearchTemplate.stream(searchQuery, SampleEntity.class);
List<SampleEntity> sampleEntities = new ArrayList<>();
while (stream.hasNext()) {
sampleEntities.add(stream.next());
}
问题是流总是返回所有条目,而不仅仅是请求页面的条目,它应该是 10。
我是不是遗漏了一些东西或者这是一个错误?
提前致谢
当使用 Stream API 时,页面大小在内部用于确定从 Elasticsearch 检索的数据大小,它对流中的元素数量没有影响。
因此在您的示例中,当您开始使用流时,将使用 Elasticsearch 滚动条获取前 10 个元素 API。当您请求第 11 个元素时,将使用内部存储的滚动 ID 获取下一个包含 10 个元素的块,以供使用。
重复此操作,直到返回所有可用作查询响应的数据。
我想通过 Spring-Data-ElasticSearch 从 ElasticSearch 中读取大量 (>15000) 个条目。
为此,我遵循了这个文档: https://docs.spring.io/spring-data/elasticsearch/docs/3.2.6.RELEASE/reference/html/#elasticsearch.scroll
我只复制了文档提供的代码片段,除了 searchQuery:
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withPageable(PageRequest.of(0, 10))
.build();
CloseableIterator<SampleEntity> stream = elasticsearchTemplate.stream(searchQuery, SampleEntity.class);
List<SampleEntity> sampleEntities = new ArrayList<>();
while (stream.hasNext()) {
sampleEntities.add(stream.next());
}
问题是流总是返回所有条目,而不仅仅是请求页面的条目,它应该是 10。
我是不是遗漏了一些东西或者这是一个错误?
提前致谢
当使用 Stream API 时,页面大小在内部用于确定从 Elasticsearch 检索的数据大小,它对流中的元素数量没有影响。
因此在您的示例中,当您开始使用流时,将使用 Elasticsearch 滚动条获取前 10 个元素 API。当您请求第 11 个元素时,将使用内部存储的滚动 ID 获取下一个包含 10 个元素的块,以供使用。
重复此操作,直到返回所有可用作查询响应的数据。