in packages/search-ui-elasticsearch-connector/src/queryBuilders/SearchQueryBuilder.ts [59:128]
private buildAggregations() {
if (
!this.queryConfig.facets ||
!Object.keys(this.queryConfig.facets).length
) {
return null;
}
const hasSelectedFilters = this.state.filters?.some(
(selectedFilter) =>
!this.queryConfig.filters?.find(
(baseFilter) => baseFilter.field === selectedFilter.field
)
);
return Object.entries(this.queryConfig.facets).reduce(
(acc, [facetKey, facetConfiguration]) => {
const isDisjunctive =
this.queryConfig.disjunctiveFacets?.includes(facetKey);
if (isDisjunctive && hasSelectedFilters) {
acc[`facet_bucket_${facetKey}`] = {
aggs: {
[facetKey]: transformFacetToAggs(facetKey, facetConfiguration)
},
filter: {
bool: {
must: this.state.filters
.filter(
(filter) =>
filter.field !== facetKey &&
this.queryConfig.facets[filter.field]
)
.map((filter) =>
transformFacet(
filter,
this.queryConfig.facets[filter.field],
this.queryConfig.disjunctiveFacets?.includes(filter.field)
)
)
}
}
};
} else {
acc.facet_bucket_all.aggs = {
...acc.facet_bucket_all.aggs,
[facetKey]: transformFacetToAggs(facetKey, facetConfiguration)
};
}
return acc;
},
{
facet_bucket_all: {
aggs: {},
filter: {
bool: {
must: (this.state.filters || [])
.filter((filter) => this.queryConfig.facets[filter.field])
.map((filter) =>
transformFacet(
filter,
this.queryConfig.facets[filter.field],
this.queryConfig.disjunctiveFacets?.includes(filter.field)
)
)
}
}
}
}
);
}