diff options
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregationBuilder.java')
-rw-r--r-- | core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregationBuilder.java | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregationBuilder.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregationBuilder.java index ad4428e11a..a461a2b712 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregationBuilder.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/filters/FiltersAggregationBuilder.java @@ -26,7 +26,9 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.query.QueryBuilder; +import org.elasticsearch.index.query.QueryRewriteContext; import org.elasticsearch.search.aggregations.AbstractAggregationBuilder; +import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.AggregatorFactories.Builder; import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.bucket.filters.FiltersAggregator.KeyedFilter; @@ -168,14 +170,27 @@ public class FiltersAggregationBuilder extends AbstractAggregationBuilder<Filter } @Override - protected AggregatorFactory<?> doBuild(SearchContext context, AggregatorFactory<?> parent, Builder subFactoriesBuilder) - throws IOException { + protected AggregationBuilder doRewrite(QueryRewriteContext queryShardContext) throws IOException { List<KeyedFilter> rewrittenFilters = new ArrayList<>(filters.size()); - for(KeyedFilter kf : filters) { - rewrittenFilters.add(new KeyedFilter(kf.key(), QueryBuilder.rewriteQuery(kf.filter(), - context.getQueryShardContext()))); + boolean changed = false; + for (KeyedFilter kf : filters) { + QueryBuilder result = QueryBuilder.rewriteQuery(kf.filter(), queryShardContext); + rewrittenFilters.add(new KeyedFilter(kf.key(), result)); + if (result != kf.filter()) { + changed = true; + } + } + if (changed) { + return new FiltersAggregationBuilder(getName(), rewrittenFilters); + } else { + return this; } - return new FiltersAggregatorFactory(name, rewrittenFilters, keyed, otherBucket, otherBucketKey, context, parent, + } + + @Override + protected AggregatorFactory<?> doBuild(SearchContext context, AggregatorFactory<?> parent, Builder subFactoriesBuilder) + throws IOException { + return new FiltersAggregatorFactory(name, filters, keyed, otherBucket, otherBucketKey, context, parent, subFactoriesBuilder, metaData); } |