Search code examples
elasticsearchspring-data-elasticsearch

Elastcisearch search Queries and pagination


I am in the process of Elasticsearch upgrade from 6 to 7. These are the dependencies we have upgarded

<dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <version>4.4.2</version>
        </dependency>

with this upgrade, I have observed that search APIs are removed from elasticsearch repository.

And the Search queries we have in the application are

    Page<class1> c1 = ElasticSearchRepository.search(queryStringQuery(searchable).fields(fields).escape(false).analyzeWildcard(true), pageable);
   Page<class1> c1 = ElasticsearchRepository.search(BoolQueryBuilder, pageable);

I am planning to change them and use elasticsearchTemplate as below

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder()
                .withQuery(queryStringQuery(searchable).fields(fields).escape(false).analyzeWildcard(true)).withPageable(pageable);
        NativeSearchQuery nativeSearchQuery = queryBuilder.build();
        org.springframework.data.elasticsearch.core.SearchHits<class1> accesscodeSearchHits = elasticsearchTemplate.search(nativeSearchQuery, class1.class);

I need help to get search result as Page<class1> not SearchHits. Not sure how to get Page as a result of search API. I do not see queryForPage(searchQuery, getEntityClass()) methods in elasticsearchOperations class.


Solution

  • You can convert SearchHits to SearchPage using SearchHitSupport.

    Consider that SearchPage extends Page.

    SearchPage<Class1> searchPage = SearchHitSupport.searchPageFor(searchHits, pageable);