Skip to content

Commit 023d08e

Browse files
authored
Adds metadata to rewritten aggregations (#28185)
* Adds metadata to rewritten aggregations Previous to this change, if any filters in the filters aggregation were rewritten, the rewritten version of the FiltersAggregationBuilder would not contain the metadata form the original. This is because `AbstractAggregationBuilder.getMetadata()` returns an empty map when not metadata is set. Closes #28170 * Always set metadata when rewritten
1 parent aec0c0f commit 023d08e

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

server/src/main/java/org/elasticsearch/search/aggregations/AggregationBuilder.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,7 @@ public final AggregationBuilder rewrite(QueryRewriteContext context) throws IOEx
101101
if (rewritten == this) {
102102
return rewritten;
103103
}
104-
if (getMetaData() != null && rewritten.getMetaData() == null) {
105-
rewritten.setMetaData(getMetaData());
106-
}
104+
rewritten.setMetaData(getMetaData());
107105
AggregatorFactories.Builder rewrittenSubAggs = factoriesBuilder.rewrite(context);
108106
rewritten.subAggregations(rewrittenSubAggs);
109107
return rewritten;

server/src/test/java/org/elasticsearch/search/aggregations/FiltersAggsRewriteIT.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import org.elasticsearch.test.ESSingleNodeTestCase;
3333

3434
import java.io.IOException;
35+
import java.util.HashMap;
36+
import java.util.Map;
3537

3638
public class FiltersAggsRewriteIT extends ESSingleNodeTestCase {
3739

@@ -58,10 +60,14 @@ public void testWrapperQueryIsRewritten() throws IOException {
5860
}
5961
FiltersAggregationBuilder builder = new FiltersAggregationBuilder("titles", new FiltersAggregator.KeyedFilter("titleterms",
6062
new WrapperQueryBuilder(bytesReference)));
63+
Map<String, Object> metadata = new HashMap<>();
64+
metadata.put(randomAlphaOfLengthBetween(1, 20), randomAlphaOfLengthBetween(1, 20));
65+
builder.setMetaData(metadata);
6166
SearchResponse searchResponse = client().prepareSearch("test").setSize(0).addAggregation(builder).get();
6267
assertEquals(3, searchResponse.getHits().getTotalHits());
6368
InternalFilters filters = searchResponse.getAggregations().get("titles");
6469
assertEquals(1, filters.getBuckets().size());
6570
assertEquals(2, filters.getBuckets().get(0).getDocCount());
71+
assertEquals(metadata, filters.getMetaData());
6672
}
6773
}

server/src/test/java/org/elasticsearch/search/aggregations/bucket/FiltersTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator.KeyedFilter;
3636

3737
import java.io.IOException;
38+
import java.util.Collections;
3839

3940
import static org.hamcrest.Matchers.instanceOf;
4041

@@ -123,6 +124,7 @@ public void testOtherBucket() throws IOException {
123124
public void testRewrite() throws IOException {
124125
// test non-keyed filter that doesn't rewrite
125126
AggregationBuilder original = new FiltersAggregationBuilder("my-agg", new MatchAllQueryBuilder());
127+
original.setMetaData(Collections.singletonMap(randomAlphaOfLengthBetween(1, 20), randomAlphaOfLengthBetween(1, 20)));
126128
AggregationBuilder rewritten = original.rewrite(new QueryRewriteContext(xContentRegistry(), null, null, () -> 0L));
127129
assertSame(original, rewritten);
128130

0 commit comments

Comments
 (0)