1
1
package org .elasticsearch .mapping ;
2
2
3
- import java .util .ArrayList ;
4
- import java .util .HashMap ;
5
- import java .util .List ;
6
- import java .util .Map ;
3
+ import java .util .*;
7
4
import java .util .Map .Entry ;
8
- import java .util .Set ;
9
5
import java .util .function .Supplier ;
10
6
11
7
import javax .annotation .Resource ;
@@ -187,6 +183,11 @@ public interface ISearchQueryBuilderHelper extends IFilterableQueryBuilderHelper
187
183
*/
188
184
ISearchQueryBuilderHelper facets ();
189
185
186
+ /**
187
+ * Set the aggregations for the given classes.
188
+ */
189
+ ISearchQueryBuilderHelper facets (List <IFacetBuilderHelper > facetBuilderHelpers );
190
+
190
191
/**
191
192
* Execute the given consumer to alter the search request builder.
192
193
*
@@ -547,19 +548,24 @@ private String[][] includeExcludes(String fetchContext) {
547
548
548
549
@ Override
549
550
public QueryBuilderHelper facets () {
551
+ return facets (new ArrayList <>());
552
+ }
553
+
554
+ @ Override
555
+ public QueryBuilderHelper facets (List <IFacetBuilderHelper > facetBuilderHelpers ) {
550
556
Set <String > aggIds = Sets .newHashSet ();
551
557
for (Class <?> clazz : classes ) {
552
558
if (filters == null ) {
553
- addAggregations (new HashMap (), clazz .getName (), searchRequestBuilder , aggIds );
559
+ addAggregations (new HashMap (), clazz .getName (), searchRequestBuilder , aggIds , facetBuilderHelpers );
554
560
} else {
555
- addAggregations (filters , clazz .getName (), searchRequestBuilder , aggIds );
561
+ addAggregations (filters , clazz .getName (), searchRequestBuilder , aggIds , facetBuilderHelpers );
556
562
}
557
563
}
558
564
return this ;
559
565
}
560
566
561
- private void addAggregations (Map <String , String []> filters , String className , SearchRequestBuilder searchRequestBuilder , Set <String > aggIds ) {
562
- final List <AggregationBuilder > aggregations = buildAggregations (className , filters .keySet ());
567
+ private void addAggregations (Map <String , String []> filters , String className , SearchRequestBuilder searchRequestBuilder , Set <String > aggIds , List < IFacetBuilderHelper > facetBuilderHelpers ) {
568
+ final List <AggregationBuilder > aggregations = buildAggregations (className , filters .keySet (), facetBuilderHelpers );
563
569
for (AggregationBuilder aggregation : aggregations ) {
564
570
if (!aggIds .contains (aggregation .getName ())) {
565
571
aggIds .add (aggregation .getName ());
@@ -575,10 +581,13 @@ private void addAggregations(Map<String, String[]> filters, String className, Se
575
581
* @param filters The set of aggregations to exclude from the facet creation.
576
582
* @return a {@link List} of {@link AggregationBuilder aggregation builders}.
577
583
*/
578
- private List <AggregationBuilder > buildAggregations (String className , Set <String > filters ) {
584
+ private List <AggregationBuilder > buildAggregations (String className , Set <String > filters , List < IFacetBuilderHelper > externalHelpers ) {
579
585
final List <AggregationBuilder > aggregationBuilders = new ArrayList <AggregationBuilder >();
580
586
List <IFacetBuilderHelper > facetBuilderHelpers = mappingBuilder .getFacets (className );
581
587
588
+ // Add external Helpers
589
+ facetBuilderHelpers .addAll (externalHelpers );
590
+
582
591
if (facetBuilderHelpers == null || facetBuilderHelpers .size () < 1 ) {
583
592
return aggregationBuilders ;
584
593
}
0 commit comments