Search code examples
elasticsearchspring-data-elasticsearchelasticsearch-aggregation

How to support Aggregations query using NativeQuery


How to support Aggregations query using NativeQuery in Spring Data Elasticsearch 5.x and new client, I've attached the existing implementation we used in 4.x

protected <T> SearchHits searchHitsForAggregation(QueryBuilder queryBuilder,
        AbstractAggregationBuilder<?> aggregationBuilders, Pageable pageable) {
    NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withSearchType(SearchType.DEFAULT)
            .withQuery(queryBuilder).withAggregations(aggregationBuilders);

    if (pageable == null) {
        searchQueryBuilder.withMaxResults(0);
    }
    else {
        searchQueryBuilder.withPageable(pageable);
    }

    NativeSearchQuery searchQuery = searchQueryBuilder.build();
    return operations.search(searchQuery, indexClass(), indexCoordinates());
}

Solution

  • You just need to use the corresponding method from the NativeQueryBuilder:

    https://docs.spring.io/spring-data/elasticsearch/docs/current/api/org/springframework/data/elasticsearch/client/elc/NativeQueryBuilder.html#withAggregation(java.lang.String,co.elastic.clients.elasticsearch._types.aggregations.Aggregation)