【问题标题】:ElastichSearchRestTemplate ignoring pageableElastichSearchRestTemplate 忽略可分页
【发布时间】:2020-03-27 13:51:21
【问题描述】:

我想通过 Spring-Data-ElasticSearch 从 ElasticSearch 中读取大量 (>15000) 条目。

为此,我遵循了以下文档: https://docs.spring.io/spring-data/elasticsearch/docs/3.2.6.RELEASE/reference/html/#elasticsearch.scroll

我只复制了文档提供的代码sn-p,除了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。

我在这里遗漏了什么还是一个错误?

提前致谢

【问题讨论】:

    标签: java spring elasticsearch spring-data spring-data-elasticsearch


    【解决方案1】:

    使用 Stream API 时,页面大小在内部用于确定从 Elasticsearch 检索到的数据的大小,它对流中的元素数量没有影响。

    因此,在您的示例中,当您开始使用流时,使用 Elasticsearch 滚动 API 获取前 10 个元素。当您请求第 11 个元素时,将使用内部存储的滚动 ID 获取下一个 10 个元素的块以供使用。

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

    【讨论】:

      猜你喜欢
      • 2013-09-13
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多