Разбиение на страницы репозитория Elasticsearch не возвращает правильный размер страницы и не сортирует данные

#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.