public class IssueIndex extends BaseIndex<Issue, IssueDto, String> {
+ private static final int DEFAULT_ISSUE_FACET_SIZE = 5;
+
private ListMultimap<String, IndexField> sortColumns = ArrayListMultimap.create();
public IssueIndex(IssueNormalizer normalizer, SearchClient client) {
if (options.isFacet()) {
// Execute Term aggregations
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.SEVERITIES, IssueNormalizer.IssueField.SEVERITY.field());
+ IssueFilterParameters.SEVERITIES, IssueNormalizer.IssueField.SEVERITY.field(), 0);
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.STATUSES, IssueNormalizer.IssueField.STATUS.field());
+ IssueFilterParameters.STATUSES, IssueNormalizer.IssueField.STATUS.field(), 0);
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.ACTION_PLANS, IssueNormalizer.IssueField.ACTION_PLAN.field(), query.actionPlans().toArray());
+ IssueFilterParameters.ACTION_PLANS, IssueNormalizer.IssueField.ACTION_PLAN.field(), 1, query.actionPlans().toArray());
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.COMPONENT_ROOT_UUIDS, IssueNormalizer.IssueField.MODULE_PATH.field(), query.componentRootUuids().toArray());
+ IssueFilterParameters.COMPONENT_ROOT_UUIDS, IssueNormalizer.IssueField.MODULE_PATH.field(), 1, query.componentRootUuids().toArray());
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.COMPONENT_UUIDS, IssueNormalizer.IssueField.COMPONENT.field(), query.componentUuids().toArray());
+ IssueFilterParameters.COMPONENT_UUIDS, IssueNormalizer.IssueField.COMPONENT.field(), 1, query.componentUuids().toArray());
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.LANGUAGES, IssueNormalizer.IssueField.LANGUAGE.field(), query.languages().toArray());
+ IssueFilterParameters.LANGUAGES, IssueNormalizer.IssueField.LANGUAGE.field(), 0, query.languages().toArray());
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.RULES, IssueNormalizer.IssueField.RULE_KEY.field(), query.rules().toArray());
+ IssueFilterParameters.RULES, IssueNormalizer.IssueField.RULE_KEY.field(), 1, query.rules().toArray());
addSimpleStickyFacetIfNeeded(query, options, filters, esQuery, esSearch,
- IssueFilterParameters.REPORTERS, IssueNormalizer.IssueField.REPORTER.field());
+ IssueFilterParameters.REPORTERS, IssueNormalizer.IssueField.REPORTER.field(), 1);
if (options.facets().contains(IssueFilterParameters.RESOLUTIONS)) {
esSearch.addAggregation(getResolutionFacet(query, options, filters, esQuery));
}
private void addSimpleStickyFacetIfNeeded(IssueQuery query, QueryContext options, Map<String, FilterBuilder> filters, QueryBuilder esQuery, SearchRequestBuilder esSearch,
- String facetName, String fieldName, Object... selectedValues) {
+ String facetName, String fieldName, int minDocCount, Object... selectedValues) {
if (options.facets().contains(facetName)) {
- esSearch.addAggregation(stickyFacetBuilder(esQuery, filters, fieldName, facetName,
- selectedValues));
+ esSearch.addAggregation(stickyFacetBuilder(esQuery, filters, fieldName, facetName, DEFAULT_ISSUE_FACET_SIZE, minDocCount, selectedValues));
}
}
assigneeFilters.remove("__isAssigned");
assigneeFilters.remove(fieldName);
BoolFilterBuilder facetFilter = getStickyFacetFilter(esQuery, assigneeFilters, fieldName);
- FilterAggregationBuilder facetTopAggregation = buildTopFacetAggregation(fieldName, facetName, facetFilter);
+ FilterAggregationBuilder facetTopAggregation = buildTopFacetAggregation(fieldName, facetName, facetFilter, DEFAULT_ISSUE_FACET_SIZE, 1);
addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, query.assignees().toArray());
// Add missing facet for unassigned issues
resolutionFilters.remove("__isResolved");
resolutionFilters.remove(fieldName);
BoolFilterBuilder facetFilter = getStickyFacetFilter(esQuery, resolutionFilters, fieldName);
- FilterAggregationBuilder facetTopAggregation = buildTopFacetAggregation(fieldName, facetName, facetFilter);
+ FilterAggregationBuilder facetTopAggregation = buildTopFacetAggregation(fieldName, facetName, facetFilter, DEFAULT_ISSUE_FACET_SIZE, 0);
addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, query.resolutions().toArray());
// Add missing facet for unresolved issues
public abstract class BaseIndex<DOMAIN, DTO extends Dto<KEY>, KEY extends Serializable>
implements Index<DOMAIN, DTO, KEY> {
+ private static final int FACET_DEFAULT_MIN_DOC_COUNT = 1;
+
+ private static final int FACET_DEFAULT_SIZE = 10;
+
private static final Logger LOG = LoggerFactory.getLogger(BaseIndex.class);
private final SearchClient client;
}
- protected AggregationBuilder stickyFacetBuilder(QueryBuilder query, Map<String, FilterBuilder> filters, String fieldName, String facetName, Object... selected) {
+ protected AggregationBuilder stickyFacetBuilder(QueryBuilder query, Map<String, FilterBuilder> filters, String fieldName, String facetName,
+ Object... selected) {
+ return stickyFacetBuilder(query, filters, fieldName, facetName, FACET_DEFAULT_SIZE, FACET_DEFAULT_MIN_DOC_COUNT, selected);
+ }
+
+ protected AggregationBuilder stickyFacetBuilder(QueryBuilder query, Map<String, FilterBuilder> filters, String fieldName, String facetName, int size, int minDocCount,
+ Object... selected) {
BoolFilterBuilder facetFilter = getStickyFacetFilter(query, filters, fieldName);
- FilterAggregationBuilder facetTopAggregation = buildTopFacetAggregation(fieldName, facetName, facetFilter);
+ FilterAggregationBuilder facetTopAggregation = buildTopFacetAggregation(fieldName, facetName, facetFilter, size, minDocCount);
facetTopAggregation = addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, selected);
return AggregationBuilders
return facetFilter;
}
- protected FilterAggregationBuilder buildTopFacetAggregation(String fieldName, String facetName, BoolFilterBuilder facetFilter) {
+ protected FilterAggregationBuilder buildTopFacetAggregation(String fieldName, String facetName, BoolFilterBuilder facetFilter, int size, int minDocCount) {
return AggregationBuilders
.filter(facetName + "_filter")
.filter(facetFilter)
AggregationBuilders.terms(facetName)
.field(fieldName)
.order(Terms.Order.count(false))
- .size(10)
- .minDocCount(1));
+ .size(size)
+ .minDocCount(minDocCount));
+ }
+
+ protected FilterAggregationBuilder buildTopFacetAggregation(String fieldName, String facetName, BoolFilterBuilder facetFilter) {
+ return buildTopFacetAggregation(fieldName, facetName, facetFilter, FACET_DEFAULT_SIZE, FACET_DEFAULT_MIN_DOC_COUNT);
}
protected FilterAggregationBuilder addSelectedItemsToFacet(String fieldName, String facetName, FilterAggregationBuilder facetTopAggregation, Object... selected) {