Search in sources :

Example 1 with SingleBucketAggregator

use of org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator in project elasticsearch by elastic.

the class AggregationPath method resolveTopmostAggregator.

/**
     * Resolves the topmost aggregator pointed by this path using the given root as a point of reference.
     *
     * @param root      The point of reference of this path
     * @return          The first child aggregator of the root pointed by this path
     */
public Aggregator resolveTopmostAggregator(Aggregator root) {
    AggregationPath.PathElement token = pathElements.get(0);
    Aggregator aggregator = root.subAggregator(token.name);
    assert (aggregator instanceof SingleBucketAggregator) || (aggregator instanceof NumericMetricsAggregator) : "this should be picked up before aggregation execution - on validate";
    return aggregator;
}
Also used : NumericMetricsAggregator(org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator) Aggregator(org.elasticsearch.search.aggregations.Aggregator) SingleBucketAggregator(org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator) NumericMetricsAggregator(org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator) SingleBucketAggregator(org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator)

Example 2 with SingleBucketAggregator

use of org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator in project elasticsearch by elastic.

the class AggregationPath method validate.

/**
     * Validates this path over the given aggregator as a point of reference.
     *
     * @param root  The point of reference of this path
     */
public void validate(Aggregator root) {
    Aggregator aggregator = root;
    for (int i = 0; i < pathElements.size(); i++) {
        aggregator = aggregator.subAggregator(pathElements.get(i).name);
        if (aggregator == null) {
            throw new AggregationExecutionException("Invalid term-aggregator order path [" + this + "]. Unknown aggregation [" + pathElements.get(i).name + "]");
        }
        if (i < pathElements.size() - 1) {
            if (!(aggregator instanceof SingleBucketAggregator)) {
                throw new AggregationExecutionException("Invalid terms aggregation order path [" + this + "]. Terms buckets can only be sorted on a sub-aggregator path " + "that is built out of zero or more single-bucket aggregations within the path and a final " + "single-bucket or a metrics aggregation at the path end. Sub-path [" + subPath(0, i + 1) + "] points to non single-bucket aggregation");
            }
            if (pathElements.get(i).key != null) {
                throw new AggregationExecutionException("Invalid terms aggregation order path [" + this + "]. Terms buckets can only be sorted on a sub-aggregator path " + "that is built out of zero or more single-bucket aggregations within the path and a " + "final single-bucket or a metrics aggregation at the path end. Sub-path [" + subPath(0, i + 1) + "] points to non single-bucket aggregation");
            }
        }
    }
    boolean singleBucket = aggregator instanceof SingleBucketAggregator;
    if (!singleBucket && !(aggregator instanceof NumericMetricsAggregator)) {
        throw new AggregationExecutionException("Invalid terms aggregation order path [" + this + "]. Terms buckets can only be sorted on a sub-aggregator path " + "that is built out of zero or more single-bucket aggregations within the path and a final " + "single-bucket or a metrics aggregation at the path end.");
    }
    AggregationPath.PathElement lastToken = lastPathElement();
    if (singleBucket) {
        if (lastToken.key != null && !"doc_count".equals(lastToken.key)) {
            throw new AggregationExecutionException("Invalid terms aggregation order path [" + this + "]. Ordering on a single-bucket aggregation can only be done on its doc_count. " + "Either drop the key (a la \"" + lastToken.name + "\") or change it to \"doc_count\" (a la \"" + lastToken.name + ".doc_count\")");
        }
        // perfectly valid to sort on single-bucket aggregation (will be sored on its doc_count)
        return;
    }
    if (aggregator instanceof NumericMetricsAggregator.SingleValue) {
        if (lastToken.key != null && !"value".equals(lastToken.key)) {
            throw new AggregationExecutionException("Invalid terms aggregation order path [" + this + "]. Ordering on a single-value metrics aggregation can only be done on its value. " + "Either drop the key (a la \"" + lastToken.name + "\") or change it to \"value\" (a la \"" + lastToken.name + ".value\")");
        }
        // perfectly valid to sort on single metric aggregation (will be sorted on its associated value)
        return;
    }
    // the aggregator must be of a multi-value metrics type
    if (lastToken.key == null) {
        throw new AggregationExecutionException("Invalid terms aggregation order path [" + this + "]. When ordering on a multi-value metrics aggregation a metric name must be specified");
    }
    if (!((NumericMetricsAggregator.MultiValue) aggregator).hasMetric(lastToken.key)) {
        throw new AggregationExecutionException("Invalid terms aggregation order path [" + this + "]. Unknown metric name [" + lastToken.key + "] on multi-value metrics aggregation [" + lastToken.name + "]");
    }
}
Also used : NumericMetricsAggregator(org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator) Aggregator(org.elasticsearch.search.aggregations.Aggregator) SingleBucketAggregator(org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator) NumericMetricsAggregator(org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator) SingleBucketAggregator(org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator) AggregationExecutionException(org.elasticsearch.search.aggregations.AggregationExecutionException)

Example 3 with SingleBucketAggregator

use of org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator in project elasticsearch by elastic.

the class AggregationPath method resolveAggregator.

/**
     * Resolves the aggregator pointed by this path using the given root as a point of reference.
     *
     * @param root      The point of reference of this path
     * @return          The aggregator pointed by this path starting from the given aggregator as a point of reference
     */
public Aggregator resolveAggregator(Aggregator root) {
    Aggregator aggregator = root;
    for (int i = 0; i < pathElements.size(); i++) {
        AggregationPath.PathElement token = pathElements.get(i);
        aggregator = aggregator.subAggregator(token.name);
        assert (aggregator instanceof SingleBucketAggregator && i <= pathElements.size() - 1) || (aggregator instanceof NumericMetricsAggregator && i == pathElements.size() - 1) : "this should be picked up before aggregation execution - on validate";
    }
    return aggregator;
}
Also used : NumericMetricsAggregator(org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator) Aggregator(org.elasticsearch.search.aggregations.Aggregator) SingleBucketAggregator(org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator) NumericMetricsAggregator(org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator) SingleBucketAggregator(org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator)

Aggregations

Aggregator (org.elasticsearch.search.aggregations.Aggregator)3 SingleBucketAggregator (org.elasticsearch.search.aggregations.bucket.SingleBucketAggregator)3 NumericMetricsAggregator (org.elasticsearch.search.aggregations.metrics.NumericMetricsAggregator)3 AggregationExecutionException (org.elasticsearch.search.aggregations.AggregationExecutionException)1