12
12
import org .elasticsearch .action .search .SearchType ;
13
13
import org .elasticsearch .common .collect .Lists ;
14
14
import org .elasticsearch .common .collect .Maps ;
15
+ import org .elasticsearch .common .collect .Sets ;
15
16
import org .elasticsearch .common .logging .ESLogger ;
16
17
import org .elasticsearch .common .logging .Loggers ;
17
18
import org .elasticsearch .index .query .*;
@@ -396,8 +397,9 @@ public SearchRequestBuilder generate(QueryBuilderAdapter queryBuilderAdapter) {
396
397
searchRequestBuilder .setTypes (getTypes ());
397
398
if (classes != null && classes .length > 0 ) {
398
399
addFetchContext (searchRequestBuilder );
400
+ Set <String > aggIds = Sets .newHashSet ();
399
401
for (Class <?> clazz : classes ) {
400
- addFilters (searchRequestBuilder , customFilter , clazz );
402
+ addFilters (searchRequestBuilder , customFilter , clazz , aggIds );
401
403
}
402
404
}
403
405
if (fieldSort != null ) {
@@ -473,7 +475,7 @@ private void addFetchContext(SearchRequestBuilder searchRequestBuilder) {
473
475
searchRequestBuilder .setFetchSource (inc , exc );
474
476
}
475
477
476
- private void addFilters (SearchRequestBuilder searchRequestBuilder , FilterBuilder customFilter , Class <?> clazz ) {
478
+ private void addFilters (SearchRequestBuilder searchRequestBuilder , FilterBuilder customFilter , Class <?> clazz , Set < String > aggIds ) {
477
479
if (clazz == null ) {
478
480
return ;
479
481
}
@@ -488,24 +490,20 @@ private void addFilters(SearchRequestBuilder searchRequestBuilder, FilterBuilder
488
490
}
489
491
if (facets ) {
490
492
if (filters == null ) {
491
- addAggregations (new HashMap <String , String []>(), clazz .getName (), searchRequestBuilder );
493
+ addAggregations (new HashMap <String , String []>(), clazz .getName (), searchRequestBuilder , aggIds );
492
494
} else {
493
- addAggregations (filters , clazz .getName (), searchRequestBuilder );
495
+ addAggregations (filters , clazz .getName (), searchRequestBuilder , aggIds );
494
496
}
495
497
}
496
498
}
497
499
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 ) {
499
501
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 );
506
506
}
507
-
508
- searchRequestBuilder .addAggregation (aggregationBuilder );
509
507
}
510
508
}
511
509
@@ -574,8 +572,9 @@ private List<AggregationBuilder> buildAggregations(String className, Set<String>
574
572
final List <AggregationBuilder > aggregationBuilders = new ArrayList <AggregationBuilder >();
575
573
List <IFacetBuilderHelper > facetBuilderHelpers = mappingBuilder .getFacets (className );
576
574
577
- if (facetBuilderHelpers == null || facetBuilderHelpers .size () < 1 )
575
+ if (facetBuilderHelpers == null || facetBuilderHelpers .size () < 1 ) {
578
576
return aggregationBuilders ;
577
+ }
579
578
580
579
for (IFacetBuilderHelper facetBuilderHelper : facetBuilderHelpers ) {
581
580
if (filters == null || !filters .contains (facetBuilderHelper .getEsFieldName ())) {
0 commit comments