Я думаю, что сначала вам нужен только поиск по количеству, то есть, я имею в виду, выполнить запрос, который вы хотите, и установить для size
значение 0
, чтобы результат просто возвращал общее количество попаданий, где вы можете получить размер каждой страницы.
int pageSize = 10;
long totalCount = searchResponse.getHits().getTotalHits();
PageCount pageCount = new PageCount();
if (totalCount <= 0)
return result;
long pages = (totalCount < pageSize) ? 1l : ((totalCount % pageSize) == 0) ? (totalCount / pageSize) : ((totalCount / pageSize) + 1);
if (totalCount <= 10000) {
result.setTotal(totalCount);
result.setPages(pages);
} else {
result.setTotal(10000);
result.setPages((10000 / pageSize));
}
Здесь я использую 10000 как ограничение, чтобы Elasticsearch ограничивал объем потребляемой памяти. Получив эту информацию, вы можете вернуть количество страниц для запроса и сделать запросы для данной страницы.
Получив это, вы можете настроить поисковый запрос следующим образом:
long size = ((pageCount.getTotal() < pageSize) ? pageCount.getTotal() : pageSize);
if (pageCount.getTotal() > pageSize && (page + 1) >= pageCount.getPages()) {
size = ((pageCount.getTotal() % pageSize) != 0 ? pageCount.getTotal() % pageSize : pageSize);
}
searchRequest.setSize((int) size).setFrom((int) (page * pageSize))
Это просто пример кода, надеюсь, вам этого достаточно.
Приветствия