#java #spring #elasticsearch #spring-data-elasticsearch
#java #spring #elasticsearch #spring-data-elasticsearch
Вопрос:
Я использую spring 2.2 и spring elastic search 3.2.4.
У меня есть этот метод, позволяющий найти в моем эластичном поиске все apk с категорией «Игра» или «Приложения» и отсортировать их по количеству установок.
public ResponseList<Apk> findMostDownloadedApkByCategory(String categoryName, int page, int size) {
logger.info("find most downloaded Apk By Category");
List<ApkDto>apkDtoList = new ArrayList<>();
ResponseList<Apk> responseList = new ResponseList(apkDtoList, false, page);
Page<Apk> apkList = apkRepo.findByCategoryNameIgnoreCaseOrderByInstallsDesc(categoryName, PageRequest.of(page, size));
if(!apkList.isEmpty()) {
ApkDto apkDto = null;
//iterate over each element
for(Apk apk : apkList) {
System.out.println(apk.getInstalls());
//We complete the dto with the company if the company exist
Optional<Company> companyOpt = companyService.findById(apk.getCompanyId());
if(companyOpt.isPresent()) {
Company company = companyOpt.get();
CompanyDto companyDto = new CompanyDto(apk.getCompanyId(), company.getName(), company.getDescription(), company.getAdress(), company.getCountry());
//convert the apk to apk dto, add the company
apkDto = convertApkToDto(apk, companyDto);
apkDtoList.add(apkDto);
}
}
responseList = new ResponseList(apkDtoList, apkList.hasNext(), page);
}
return responseList;
}
мой репозиторий:
Page<Apk> findByCategoryNameIgnoreCaseOrderByInstallsDesc(String categoryName, Pageable pageable);
В моем эластичном поиске у меня есть 26 данных с catefory «Game» и устанавливается от 0 до 56.
Когда я вызываю свой метод, например, с
страница = 1 и размер = 20
elasticsearch возвращает только 5 данных в содержимом, но показывает в графе 26 данных
Данные не сортируются по установкам. Я действительно не знаю, как исправить это поведение. Заранее спасибо.
Ответ №1:
Я вижу 6 элементов в apkList.content
списке на вашем скриншоте. Поскольку это страница 1 с размером страницы 20 и общим количеством элементов 26, это правильно.
Чтобы получить первые 20, вы получите страницу 0 с размером 20.