private static AggregationBuilder createAssigneesFacet(IssueQuery query, Map<String, QueryBuilder> filters, QueryBuilder queryBuilder) { String fieldName = ASSIGNEES.getFieldName(); String facetName = ASSIGNEES.getName(); // Same as in super.stickyFacetBuilder Map<String, QueryBuilder> assigneeFilters = Maps.newHashMap(filters); assigneeFilters.remove(IS_ASSIGNED_FILTER); assigneeFilters.remove(fieldName); StickyFacetBuilder assigneeFacetBuilder = newStickyFacetBuilder(query, assigneeFilters, queryBuilder); BoolQueryBuilder facetFilter = assigneeFacetBuilder.getStickyFacetFilter(fieldName); FilterAggregationBuilder facetTopAggregation = assigneeFacetBuilder.buildTopFacetAggregation(fieldName, facetName, facetFilter, ASSIGNEES.getSize()); if (!query.assignees().isEmpty()) { facetTopAggregation = assigneeFacetBuilder.addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, t -> t, query.assignees().toArray()); } // Add missing facet for unassigned issues facetTopAggregation.subAggregation( addEffortAggregationIfNeeded(query, AggregationBuilders .missing(facetName + FACET_SUFFIX_MISSING) .field(fieldName))); return AggregationBuilders .global(facetName) .subAggregation(facetTopAggregation); }
private static AggregationBuilder createResolutionFacet(IssueQuery query, Map<String, QueryBuilder> filters, QueryBuilder esQuery) { String fieldName = RESOLUTIONS.getFieldName(); String facetName = RESOLUTIONS.getName(); // Same as in super.stickyFacetBuilder Map<String, QueryBuilder> resolutionFilters = Maps.newHashMap(filters); resolutionFilters.remove("__isResolved"); resolutionFilters.remove(fieldName); StickyFacetBuilder assigneeFacetBuilder = newStickyFacetBuilder(query, resolutionFilters, esQuery); BoolQueryBuilder facetFilter = assigneeFacetBuilder.getStickyFacetFilter(fieldName); FilterAggregationBuilder facetTopAggregation = assigneeFacetBuilder.buildTopFacetAggregation(fieldName, facetName, facetFilter, RESOLUTIONS.getSize()); facetTopAggregation = assigneeFacetBuilder.addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, t -> t); // Add missing facet for unresolved issues facetTopAggregation.subAggregation( addEffortAggregationIfNeeded(query, AggregationBuilders .missing(facetName + FACET_SUFFIX_MISSING) .field(fieldName))); return AggregationBuilders .global(facetName) .subAggregation(facetTopAggregation); }
public TermsResult terms(String field, List<String> stackedFields, int size, String query, String filter, TimeRange range, Sorting.Direction sorting) { final Terms.Order termsOrder = sorting == Sorting.Direction.DESC ? Terms.Order.count(false) : Terms.Order.count(true); final SearchSourceBuilder searchSourceBuilder = filteredSearchRequest(query, filter, range); searchSourceBuilder.aggregation(createTermsBuilder(field, stackedFields, size, termsOrder)); searchSourceBuilder.aggregation(AggregationBuilders.missing("missing") .field(field)); final Set<String> affectedIndices = determineAffectedIndices(range, filter); if (affectedIndices.isEmpty()) { return TermsResult.empty(query, searchSourceBuilder.toString()); } final Search.Builder searchBuilder = new Search.Builder(searchSourceBuilder.toString()) .ignoreUnavailable(true) .allowNoIndices(true) .addType(IndexMapping.TYPE_MESSAGE) .addIndex(affectedIndices); final io.searchbox.core.SearchResult searchResult = wrapInMultiSearch(searchBuilder.build(), () -> "Unable to perform terms query"); recordEsMetrics(searchResult, range); final TermsAggregation termsAggregation = searchResult.getAggregations().getFilterAggregation(AGG_FILTER).getTermsAggregation(AGG_TERMS); final MissingAggregation missing = searchResult.getAggregations().getMissingAggregation("missing"); return new TermsResult( termsAggregation, missing.getMissing(), searchResult.getTotal(), query, searchSourceBuilder.toString(), tookMsFromSearchResult(searchResult), // Concat field and stacked fields into one fields list ImmutableList.<String>builder().add(field).addAll(stackedFields).build() ); }
.dateHistogramInterval(interval.toESInterval()) .subAggregation(createTermsBuilder(field, stackedFields, size, termsOrder)) .subAggregation(AggregationBuilders.missing("missing").field(field));
@JsonIgnore @Override public AggregationBuilder getEsAggregate() { return AggregationBuilders.missing(getId()).field(getField()); } }
private static AggregationBuilder createResolutionFacet(IssueQuery query, Map<String, QueryBuilder> filters, QueryBuilder esQuery) { String fieldName = IssueIndexDefinition.FIELD_ISSUE_RESOLUTION; String facetName = PARAM_RESOLUTIONS; // Same as in super.stickyFacetBuilder Map<String, QueryBuilder> resolutionFilters = Maps.newHashMap(filters); resolutionFilters.remove("__isResolved"); resolutionFilters.remove(fieldName); StickyFacetBuilder assigneeFacetBuilder = newStickyFacetBuilder(query, resolutionFilters, esQuery); BoolQueryBuilder facetFilter = assigneeFacetBuilder.getStickyFacetFilter(fieldName); FilterAggregationBuilder facetTopAggregation = assigneeFacetBuilder.buildTopFacetAggregation(fieldName, facetName, facetFilter, DEFAULT_FACET_SIZE); facetTopAggregation = assigneeFacetBuilder.addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, t -> t); // Add missing facet for unresolved issues facetTopAggregation.subAggregation( addEffortAggregationIfNeeded(query, AggregationBuilders .missing(facetName + FACET_SUFFIX_MISSING) .field(fieldName))); return AggregationBuilders .global(facetName) .subAggregation(facetTopAggregation); }
private static AggregationBuilder createAssigneesFacet(IssueQuery query, Map<String, QueryBuilder> filters, QueryBuilder queryBuilder) { String fieldName = IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE_UUID; String facetName = PARAM_ASSIGNEES; // Same as in super.stickyFacetBuilder Map<String, QueryBuilder> assigneeFilters = Maps.newHashMap(filters); assigneeFilters.remove(IS_ASSIGNED_FILTER); assigneeFilters.remove(fieldName); StickyFacetBuilder assigneeFacetBuilder = newStickyFacetBuilder(query, assigneeFilters, queryBuilder); BoolQueryBuilder facetFilter = assigneeFacetBuilder.getStickyFacetFilter(fieldName); FilterAggregationBuilder facetTopAggregation = assigneeFacetBuilder.buildTopFacetAggregation(fieldName, facetName, facetFilter, DEFAULT_FACET_SIZE); Collection<String> assigneesEscaped = escapeValuesForFacetInclusion(query.assignees()); if (!assigneesEscaped.isEmpty()) { facetTopAggregation = assigneeFacetBuilder.addSelectedItemsToFacet(fieldName, facetName, facetTopAggregation, t -> t, assigneesEscaped.toArray()); } // Add missing facet for unassigned issues facetTopAggregation.subAggregation( addEffortAggregationIfNeeded(query, AggregationBuilders .missing(facetName + FACET_SUFFIX_MISSING) .field(fieldName))); return AggregationBuilders .global(facetName) .subAggregation(facetTopAggregation); }
@Override public List<AggregationBuilder> buildFacets() { TermsBuilder termsBuilder = AggregationBuilders.terms(getEsFieldName()).field(getEsFieldName()).size(size); MissingBuilder missingBuilder = AggregationBuilders.missing("missing_" + getEsFieldName()).field(getEsFieldName()); return Lists.newArrayList(termsBuilder, missingBuilder); } }
public TermsResult terms(String field, List<String> stackedFields, int size, String query, String filter, TimeRange range, Sorting.Direction sorting) { final Terms.Order termsOrder = sorting == Sorting.Direction.DESC ? Terms.Order.count(false) : Terms.Order.count(true); final SearchSourceBuilder searchSourceBuilder = filteredSearchRequest(query, filter, range); searchSourceBuilder.aggregation(createTermsBuilder(field, stackedFields, size, termsOrder)); searchSourceBuilder.aggregation(AggregationBuilders.missing("missing") .field(field)); final Set<String> affectedIndices = determineAffectedIndices(range, filter); if (affectedIndices.isEmpty()) { return TermsResult.empty(query, searchSourceBuilder.toString()); } final Search.Builder searchBuilder = new Search.Builder(searchSourceBuilder.toString()) .ignoreUnavailable(true) .allowNoIndices(true) .addType(IndexMapping.TYPE_MESSAGE) .addIndex(affectedIndices); final io.searchbox.core.SearchResult searchResult = wrapInMultiSearch(searchBuilder.build(), () -> "Unable to perform terms query"); recordEsMetrics(searchResult, range); final TermsAggregation termsAggregation = searchResult.getAggregations().getFilterAggregation(AGG_FILTER).getTermsAggregation(AGG_TERMS); final MissingAggregation missing = searchResult.getAggregations().getMissingAggregation("missing"); return new TermsResult( termsAggregation, missing.getMissing(), searchResult.getTotal(), query, searchSourceBuilder.toString(), tookMsFromSearchResult(searchResult), // Concat field and stacked fields into one fields list ImmutableList.<String>builder().add(field).addAll(stackedFields).build() ); }
.interval(interval.toESInterval()) .subAggregation(createTermsBuilder(field, stackedFields, size, termsOrder)) .subAggregation(AggregationBuilders.missing("missing").field(field));