Class FacetConfigurationApplyer


  • public class FacetConfigurationApplyer
    extends Object
    • Constructor Detail

      • FacetConfigurationApplyer

        public FacetConfigurationApplyer​(SearchContext context)
    • Method Detail

      • buildAggregators

        public List<org.elasticsearch.search.aggregations.AggregationBuilder> buildAggregators​(FilterContext filterContext)

        This method uses the initialized FacetCreators to build the right aggregations in respect of the active post filters.

        Background / Details:

        For facets that should stay the same, even if one of its filters was selected ("multi-select-facets"), the post filtering feature is used. This way such facets can be created without their active filter. See Elasticsearch post filter documentation

        However this leads to the problem, that other facets are also not filtered, although they should be. Otherwise they may present filters that lead to 0 results in combination with the active post filter/s.

        The (only) solution is to apply the post filters for all those other aggregations as well, but of course not for the aggregation of the active post filter. This gets complicated if there are several post filters for different multi-select-facets. In that case each according aggregation needs to be filtered with the other post filters but not the related one.

        Example:

        "brand" and "price" are configured to be multi-select-facets. If for both facets a filter is applied, the "brand" aggregation must consider the "price" filter and the "price" aggregation must consider the "brand" filter. All other aggregations must consider both post filters.

        More details at http://stackoverflow.com/questions/41369749

        Parameters:
        filterContext - context that holds the filter queries
        Returns:
        list of filtered and/or unfiltered aggregation builders depending on the existance of post filters