Search in sources :

Example 1 with StickyFacetBuilder

use of org.sonar.server.es.StickyFacetBuilder in project sonarqube by SonarSource.

the class IssueIndex method createAssigneesFacet.

private static AggregationBuilder createAssigneesFacet(IssueQuery query, Map<String, QueryBuilder> filters, QueryBuilder queryBuilder) {
    String fieldName = IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE;
    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, 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);
}
Also used : FilterAggregationBuilder(org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) StickyFacetBuilder(org.sonar.server.es.StickyFacetBuilder) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) QueryBuilder(org.elasticsearch.index.query.QueryBuilder)

Example 2 with StickyFacetBuilder

use of org.sonar.server.es.StickyFacetBuilder in project sonarqube by SonarSource.

the class IssueIndex method createResolutionFacet.

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);
    // Add missing facet for unresolved issues
    facetTopAggregation.subAggregation(addEffortAggregationIfNeeded(query, AggregationBuilders.missing(facetName + FACET_SUFFIX_MISSING).field(fieldName)));
    return AggregationBuilders.global(facetName).subAggregation(facetTopAggregation);
}
Also used : FilterAggregationBuilder(org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) StickyFacetBuilder(org.sonar.server.es.StickyFacetBuilder) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) QueryBuilder(org.elasticsearch.index.query.QueryBuilder)

Example 3 with StickyFacetBuilder

use of org.sonar.server.es.StickyFacetBuilder in project sonarqube by SonarSource.

the class RuleIndex method getFacets.

private static Map<String, AbstractAggregationBuilder> getFacets(RuleQuery query, SearchOptions options, QueryBuilder queryBuilder, Map<String, QueryBuilder> filters) {
    Map<String, AbstractAggregationBuilder> aggregations = new HashMap<>();
    StickyFacetBuilder stickyFacetBuilder = stickyFacetBuilder(queryBuilder, filters);
    addDefaultFacets(query, options, aggregations, stickyFacetBuilder);
    addStatusFacetIfNeeded(options, aggregations, stickyFacetBuilder);
    if (options.getFacets().contains(FACET_SEVERITIES)) {
        aggregations.put(FACET_SEVERITIES, stickyFacetBuilder.buildStickyFacet(FIELD_RULE_SEVERITY, FACET_SEVERITIES, Severity.ALL.toArray()));
    }
    addActiveSeverityFacetIfNeeded(query, options, aggregations, stickyFacetBuilder);
    return aggregations;
}
Also used : AbstractAggregationBuilder(org.elasticsearch.search.aggregations.AbstractAggregationBuilder) HashMap(java.util.HashMap) StickyFacetBuilder(org.sonar.server.es.StickyFacetBuilder)

Example 4 with StickyFacetBuilder

use of org.sonar.server.es.StickyFacetBuilder in project sonarqube by SonarSource.

the class IssueIndex method configureStickyFacets.

private void configureStickyFacets(IssueQuery query, SearchOptions options, Map<String, QueryBuilder> filters, QueryBuilder esQuery, SearchRequestBuilder esSearch) {
    if (!options.getFacets().isEmpty()) {
        StickyFacetBuilder stickyFacetBuilder = newStickyFacetBuilder(query, filters, esQuery);
        // Execute Term aggregations
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_SEVERITIES, IssueIndexDefinition.FIELD_ISSUE_SEVERITY);
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_STATUSES, IssueIndexDefinition.FIELD_ISSUE_STATUS);
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_PROJECT_UUIDS, IssueIndexDefinition.FIELD_ISSUE_PROJECT_UUID, query.projectUuids().toArray());
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_MODULE_UUIDS, IssueIndexDefinition.FIELD_ISSUE_MODULE_UUID, query.moduleUuids().toArray());
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_DIRECTORIES, IssueIndexDefinition.FIELD_ISSUE_DIRECTORY_PATH, query.directories().toArray());
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_FILE_UUIDS, IssueIndexDefinition.FIELD_ISSUE_COMPONENT_UUID, query.fileUuids().toArray());
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_LANGUAGES, IssueIndexDefinition.FIELD_ISSUE_LANGUAGE, query.languages().toArray());
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_RULES, IssueIndexDefinition.FIELD_ISSUE_RULE_KEY, query.rules().toArray());
        addSimpleStickyFacetIfNeeded(options, stickyFacetBuilder, esSearch, PARAM_AUTHORS, IssueIndexDefinition.FIELD_ISSUE_AUTHOR_LOGIN, query.authors().toArray());
        if (options.getFacets().contains(PARAM_TAGS)) {
            esSearch.addAggregation(stickyFacetBuilder.buildStickyFacet(IssueIndexDefinition.FIELD_ISSUE_TAGS, PARAM_TAGS, query.tags().toArray()));
        }
        if (options.getFacets().contains(PARAM_TYPES)) {
            esSearch.addAggregation(stickyFacetBuilder.buildStickyFacet(IssueIndexDefinition.FIELD_ISSUE_TYPE, PARAM_TYPES, query.types().toArray()));
        }
        if (options.getFacets().contains(PARAM_RESOLUTIONS)) {
            esSearch.addAggregation(createResolutionFacet(query, filters, esQuery));
        }
        if (options.getFacets().contains(PARAM_ASSIGNEES)) {
            esSearch.addAggregation(createAssigneesFacet(query, filters, esQuery));
        }
        addAssignedToMeFacetIfNeeded(esSearch, options, query, filters, esQuery);
        if (options.getFacets().contains(PARAM_CREATED_AT)) {
            getCreatedAtFacet(query, filters, esQuery).ifPresent(esSearch::addAggregation);
        }
    }
    if (hasQueryEffortFacet(query)) {
        esSearch.addAggregation(EFFORT_AGGREGATION);
    }
}
Also used : StickyFacetBuilder(org.sonar.server.es.StickyFacetBuilder)

Example 5 with StickyFacetBuilder

use of org.sonar.server.es.StickyFacetBuilder in project sonarqube by SonarSource.

the class IssueIndex method addAssignedToMeFacetIfNeeded.

private void addAssignedToMeFacetIfNeeded(SearchRequestBuilder builder, SearchOptions options, IssueQuery query, Map<String, QueryBuilder> filters, QueryBuilder queryBuilder) {
    String login = userSession.getLogin();
    if (!options.getFacets().contains(FACET_ASSIGNED_TO_ME) || StringUtils.isEmpty(login)) {
        return;
    }
    String fieldName = IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE;
    String facetName = FACET_ASSIGNED_TO_ME;
    // Same as in super.stickyFacetBuilder
    StickyFacetBuilder assignedToMeFacetBuilder = newStickyFacetBuilder(query, filters, queryBuilder);
    BoolQueryBuilder facetFilter = assignedToMeFacetBuilder.getStickyFacetFilter(IS_ASSIGNED_FILTER, fieldName);
    FilterAggregationBuilder facetTopAggregation = AggregationBuilders.filter(facetName + "__filter").filter(facetFilter).subAggregation(addEffortAggregationIfNeeded(query, AggregationBuilders.terms(facetName + "__terms").field(fieldName).include(escapeSpecialRegexChars(login))));
    builder.addAggregation(AggregationBuilders.global(facetName).subAggregation(facetTopAggregation));
}
Also used : FilterAggregationBuilder(org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder) BoolQueryBuilder(org.elasticsearch.index.query.BoolQueryBuilder) StickyFacetBuilder(org.sonar.server.es.StickyFacetBuilder)

Aggregations

StickyFacetBuilder (org.sonar.server.es.StickyFacetBuilder)6 BoolQueryBuilder (org.elasticsearch.index.query.BoolQueryBuilder)3 FilterAggregationBuilder (org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder)3 QueryBuilder (org.elasticsearch.index.query.QueryBuilder)2 HashMap (java.util.HashMap)1 AbstractAggregationBuilder (org.elasticsearch.search.aggregations.AbstractAggregationBuilder)1