ElastichSearchRestTemplate игнорирует страницы - PullRequest
0 голосов
/ 27 марта 2020

Я хочу прочитать большое количество (> 15000) записей из ElasticSearch через Spring-Data-ElasticSearch.

Для этого я следовал этой документации: 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.

Я что-то здесь упустил или это ошибка?

Заранее спасибо

1 Ответ

0 голосов
/ 27 марта 2020

при использовании Stream API размер страницы используется внутренне для определения размера данных, извлекаемых из Elasticsearch, он не влияет на количество элементов в потоке.

Так в вашем примере Когда вы начинаете использовать поток, первые 10 элементов извлекаются с помощью API-интерфейса прокрутки Elasticsearch. Когда вы запрашиваете 11-й элемент, следующий фрагмент из 10 элементов извлекается с внутренне сохраненным идентификатором прокрутки, который становится доступным для использования.

Это повторяется до тех пор, пока не будут возвращены все данные, доступные в качестве ответа на запрос.

...