1212import org .elasticsearch .action .search .SearchType ;
1313import org .elasticsearch .common .collect .Lists ;
1414import org .elasticsearch .common .collect .Maps ;
15+ import org .elasticsearch .common .collect .Sets ;
1516import org .elasticsearch .common .logging .ESLogger ;
1617import org .elasticsearch .common .logging .Loggers ;
1718import org .elasticsearch .index .query .*;
@@ -396,8 +397,9 @@ public SearchRequestBuilder generate(QueryBuilderAdapter queryBuilderAdapter) {
396397 searchRequestBuilder .setTypes (getTypes ());
397398 if (classes != null && classes .length > 0 ) {
398399 addFetchContext (searchRequestBuilder );
400+ Set <String > aggIds = Sets .newHashSet ();
399401 for (Class <?> clazz : classes ) {
400- addFilters (searchRequestBuilder , customFilter , clazz );
402+ addFilters (searchRequestBuilder , customFilter , clazz , aggIds );
401403 }
402404 }
403405 if (fieldSort != null ) {
@@ -473,7 +475,7 @@ private void addFetchContext(SearchRequestBuilder searchRequestBuilder) {
473475 searchRequestBuilder .setFetchSource (inc , exc );
474476 }
475477
476- private void addFilters (SearchRequestBuilder searchRequestBuilder , FilterBuilder customFilter , Class <?> clazz ) {
478+ private void addFilters (SearchRequestBuilder searchRequestBuilder , FilterBuilder customFilter , Class <?> clazz , Set < String > aggIds ) {
477479 if (clazz == null ) {
478480 return ;
479481 }
@@ -488,24 +490,20 @@ private void addFilters(SearchRequestBuilder searchRequestBuilder, FilterBuilder
488490 }
489491 if (facets ) {
490492 if (filters == null ) {
491- addAggregations (new HashMap <String , String []>(), clazz .getName (), searchRequestBuilder );
493+ addAggregations (new HashMap <String , String []>(), clazz .getName (), searchRequestBuilder , aggIds );
492494 } else {
493- addAggregations (filters , clazz .getName (), searchRequestBuilder );
495+ addAggregations (filters , clazz .getName (), searchRequestBuilder , aggIds );
494496 }
495497 }
496498 }
497499
498- private void addAggregations (Map <String , String []> filters , String className , SearchRequestBuilder searchRequestBuilder ) {
500+ private void addAggregations (Map <String , String []> filters , String className , SearchRequestBuilder searchRequestBuilder , Set < String > aggIds ) {
499501 final List <AggregationBuilder > aggregations = buildAggregations (className , filters .keySet ());
500-
501- if (aggregations .size () > 0 ) {
502- AggregationBuilder aggregationBuilder = AggregationBuilders .global ("facet_aggregation" );
503-
504- for (AggregationBuilder aggregation : aggregations ) {
505- aggregationBuilder .subAggregation (aggregation );
502+ for (AggregationBuilder aggregation : aggregations ) {
503+ if (!aggIds .contains (aggregation .getName ())) {
504+ aggIds .add (aggregation .getName ());
505+ searchRequestBuilder .addAggregation (aggregation );
506506 }
507-
508- searchRequestBuilder .addAggregation (aggregationBuilder );
509507 }
510508 }
511509
@@ -574,8 +572,9 @@ private List<AggregationBuilder> buildAggregations(String className, Set<String>
574572 final List <AggregationBuilder > aggregationBuilders = new ArrayList <AggregationBuilder >();
575573 List <IFacetBuilderHelper > facetBuilderHelpers = mappingBuilder .getFacets (className );
576574
577- if (facetBuilderHelpers == null || facetBuilderHelpers .size () < 1 )
575+ if (facetBuilderHelpers == null || facetBuilderHelpers .size () < 1 ) {
578576 return aggregationBuilders ;
577+ }
579578
580579 for (IFacetBuilderHelper facetBuilderHelper : facetBuilderHelpers ) {
581580 if (filters == null || !filters .contains (facetBuilderHelper .getEsFieldName ())) {
0 commit comments