Прокрутка ElasticsearchRestTemplate получить следующие страницы - PullRequest
1 голос
/ 09 июля 2020

я использую эластичный поиск пружинных данных как таковой (https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference).

Это мой пом. xml

<properties>
        <spring-data-elasticsearch.version>3.2.6</spring-data-elasticsearch.version>
</properties>
...
<!-- Elasticsearch -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>${spring-data-elasticsearch.version}.RELEASE</version>
        </dependency>
    </properties>

У меня есть код

 private ElasticsearchRestTemplate template;
    
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                        .withPageable(PageRequest.of(0, 2/*, Sort.Direction.ASC, "meta.time_created"*/))
                        .build();
        
                Page<myData> scroll = this.template.startScroll(30000, searchQuery, myData.class);
                while(scroll.hasNext()) {
                    LOGGER.info("Scroll!");
                    LOGGER.info(String.valueOf(scroll.getSize()));
                    System.out.println(scroll.nextPageable());
                    List<myData> l = scroll.getContent();
                    System.out.println(l.size());
                    Pageable p = scroll.nextPageable();
        
                    page++;
        
                    searchQuery = new NativeSearchQueryBuilder()
                            .withPageable(PageRequest.of(page, 2/*, Sort.Direction.ASC, "meta.time_created"*/))
                            .build();
        
                    scroll = this.template.startScroll(30000, searchQuery, myData.class);
        }

Я не могу получить следующие страницы в свитке. свиток бесконечно зацикливается на той же странице номер 1. Как переместить этот свиток?

1 Ответ

0 голосов
/ 09 июля 2020

В вашем коде отсутствует вызов continueScroll . Следующая программа предоставит вам то, что вам нужно

private ElasticsearchRestTemplate template;

SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withPageable(PageRequest.of(0, 2/*, Sort.Direction.ASC, "meta.time_created"*/))
                .build();

ScrolledPage<myData> scroll = this.template.startScroll(30000, searchQuery, myData.class);
// First page
List<myData> l = scroll.getContent();
System.out.println(l.size());

while(scroll.hasNext()) {
    // Advance the scroll to next page now
    scroll = this.template.continueScroll(scroll.getScrollId(), 30000, myData.class);
    
    LOGGER.info("Scroll!");
    LOGGER.info(String.valueOf(scroll.getSize()));
    System.out.println(scroll.nextPageable());
    l = scroll.getContent();
    System.out.println(l.size());            
}

Надеюсь, это поможет !!

...