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 个元素的块,以供使用。

重复此操作,直到返回所有可用作查询响应的数据。