/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.query; import org.elasticsearch.index.query.FilterBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.facet.statistical.StatisticalFacetBuilder; import com.enonic.cms.core.search.query.factory.FilterQueryBuilderFactory; public class AggregatedQueryTranslator { public static final String AGGREGATED_FACET_NAME = "aggregatedQuery"; private final FilterQueryBuilderFactory filterQueryBuilderFactory = new FilterQueryBuilderFactory(); public SearchSourceBuilder build( final AggregatedQuery query ) { final SearchSourceBuilder builder = new SearchSourceBuilder(); final QueryField aggregateField = new QueryField( QueryFieldNameResolver.resolveQueryFieldName( query.getField() ) ); builder.query( QueryBuilders.matchAllQuery() ); builder.size( 0 ); final StatisticalFacetBuilder facetBuilder = new StatisticalFacetBuilder( AGGREGATED_FACET_NAME ).field( aggregateField.getFieldNameForNumericQueries() ); applyFilters( query, facetBuilder ); builder.facet( facetBuilder ); return builder; } private void applyFilters( final AggregatedQuery query, final StatisticalFacetBuilder facetBuilder ) { final FilterBuilder filterToApply = filterQueryBuilderFactory.buildFilter( query ); if ( filterToApply != null ) { facetBuilder.facetFilter( filterToApply ); } } }