Skip to content

Commit aacdbf8

Browse files
author
HAJJIMI Anouar
committed
Replacing aggregations with facets
1 parent 1e62e60 commit aacdbf8

File tree

1 file changed

+50
-9
lines changed

1 file changed

+50
-9
lines changed

elasticsearch-mapping/src/main/java/org/elasticsearch/mapping/QueryHelper.java

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
import org.elasticsearch.index.query.QueryBuilder;
2323
import org.elasticsearch.index.query.QueryBuilders;
2424
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
25+
import org.elasticsearch.search.aggregations.AggregationBuilder;
26+
import org.elasticsearch.search.aggregations.AggregationBuilders;
27+
import org.elasticsearch.search.aggregations.bucket.filters.FiltersAggregationBuilder;
28+
import org.elasticsearch.search.aggregations.metrics.MetricsAggregationBuilder;
2529
import org.elasticsearch.search.facet.FacetBuilder;
2630
import org.elasticsearch.search.sort.FieldSortBuilder;
2731
import org.elasticsearch.search.sort.SortBuilders;
@@ -493,20 +497,33 @@ private void addFilters(SearchRequestBuilder searchRequestBuilder, FilterBuilder
493497
}
494498
if (facets) {
495499
if (filters == null) {
496-
addFacets(new HashMap<String, String[]>(), clazz.getName(), searchRequestBuilder, filter);
500+
addAggregations(new HashMap<String, String[]>(), clazz.getName(), searchRequestBuilder, filter);
497501
} else {
498-
addFacets(filters, clazz.getName(), searchRequestBuilder, filter);
502+
addAggregations(filters, clazz.getName(), searchRequestBuilder, filter);
499503
}
500504
}
501505
}
502506

503-
private void addFacets(Map<String, String[]> filters, String className, SearchRequestBuilder searchRequestBuilder, FilterBuilder filter) {
504-
final List<FacetBuilder> facets = buildFacets(className, filters.keySet());
505-
for (final FacetBuilder facet : facets) {
506-
if (filter != null) {
507-
facet.facetFilter(filter);
507+
private void addAggregations(Map<String, String[]> filters, String className, SearchRequestBuilder searchRequestBuilder, FilterBuilder filter) {
508+
final List<AggregationBuilder> aggregations = buildAggregations(className, filters.keySet());
509+
510+
if (aggregations.size() > 0) {
511+
AggregationBuilder aggregationBuilder;
512+
513+
if (filter == null){
514+
// In order to gather all unfiltered aggregations faceted results under one single parent aggregation, a Global Aggregation is used
515+
aggregationBuilder = AggregationBuilders.global("global_aggregation");
516+
}
517+
else {
518+
// To include filters inside filtered aggregation results
519+
aggregationBuilder = AggregationBuilders.filters("filter_aggregation").filter(filter);
508520
}
509-
searchRequestBuilder.addFacet(facet);
521+
522+
for (AggregationBuilder aggregation : aggregations) {
523+
aggregationBuilder.subAggregation(aggregation);
524+
}
525+
526+
searchRequestBuilder.addAggregation(aggregationBuilder);
510527
}
511528
}
512529

@@ -566,7 +583,7 @@ private FilterBuilder getAndFilter(List<FilterBuilder> filters) {
566583

567584
/**
568585
* Create a list of facets for the given type.
569-
*
586+
*
570587
* @param className The name of the class for which to create facets.
571588
* @param filters The set of facets to exclude from the facet creation.
572589
* @return a {@link List} of {@link FacetBuilder facet builders}.
@@ -582,9 +599,33 @@ private List<FacetBuilder> buildFacets(String className, Set<String> filters) {
582599
for (IFacetBuilderHelper facetBuilderHelper : facetBuilderHelpers) {
583600
if (filters == null || !filters.contains(facetBuilderHelper.getEsFieldName())) {
584601
facetBuilders.add(facetBuilderHelper.buildFacet());
602+
585603
}
586604
}
587605
return facetBuilders;
588606
}
607+
608+
/**
609+
* Create a list of aggregations counts for the given type.
610+
*
611+
* @param className The name of the class for which to create facets.
612+
* @param filters The set of aggregations to exclude from the facet creation.
613+
* @return a {@link List} of {@link AggregationBuilder aggregation builders}.
614+
*/
615+
private List<AggregationBuilder> buildAggregations(String className, Set<String> filters) {
616+
final List<AggregationBuilder> aggregationBuilders = new ArrayList<AggregationBuilder>();
617+
List<IFacetBuilderHelper> facetBuilderHelpers = mappingBuilder.getFacets(className);
618+
619+
if(facetBuilderHelpers == null || facetBuilderHelpers.size() < 1 )
620+
return aggregationBuilders;
621+
622+
for (IFacetBuilderHelper facetBuilderHelper : facetBuilderHelpers) {
623+
if (filters == null || !filters.contains(facetBuilderHelper.getEsFieldName()))
624+
aggregationBuilders.add(AggregationBuilders.terms(facetBuilderHelper.getEsFieldName()).field(facetBuilderHelper.getEsFieldName()));
625+
}
626+
627+
return aggregationBuilders;
628+
629+
}
589630
}
590631
}

0 commit comments

Comments
 (0)