mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-27 10:28:28 +00:00
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
This commit is contained in:
parent
aec0c0f9b6
commit
023d08ee91
@ -101,9 +101,7 @@ public abstract class AggregationBuilder
|
||||
if (rewritten == this) {
|
||||
return rewritten;
|
||||
}
|
||||
if (getMetaData() != null && rewritten.getMetaData() == null) {
|
||||
rewritten.setMetaData(getMetaData());
|
||||
}
|
||||
rewritten.setMetaData(getMetaData());
|
||||
AggregatorFactories.Builder rewrittenSubAggs = factoriesBuilder.rewrite(context);
|
||||
rewritten.subAggregations(rewrittenSubAggs);
|
||||
return rewritten;
|
||||
|
@ -32,6 +32,8 @@ import org.elasticsearch.search.aggregations.bucket.filter.InternalFilters;
|
||||
import org.elasticsearch.test.ESSingleNodeTestCase;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class FiltersAggsRewriteIT extends ESSingleNodeTestCase {
|
||||
|
||||
@ -58,10 +60,14 @@ public class FiltersAggsRewriteIT extends ESSingleNodeTestCase {
|
||||
}
|
||||
FiltersAggregationBuilder builder = new FiltersAggregationBuilder("titles", new FiltersAggregator.KeyedFilter("titleterms",
|
||||
new WrapperQueryBuilder(bytesReference)));
|
||||
Map<String, Object> metadata = new HashMap<>();
|
||||
metadata.put(randomAlphaOfLengthBetween(1, 20), randomAlphaOfLengthBetween(1, 20));
|
||||
builder.setMetaData(metadata);
|
||||
SearchResponse searchResponse = client().prepareSearch("test").setSize(0).addAggregation(builder).get();
|
||||
assertEquals(3, searchResponse.getHits().getTotalHits());
|
||||
InternalFilters filters = searchResponse.getAggregations().get("titles");
|
||||
assertEquals(1, filters.getBuckets().size());
|
||||
assertEquals(2, filters.getBuckets().get(0).getDocCount());
|
||||
assertEquals(metadata, filters.getMetaData());
|
||||
}
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregationBui
|
||||
import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator.KeyedFilter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.hamcrest.Matchers.instanceOf;
|
||||
|
||||
@ -123,6 +124,7 @@ public class FiltersTests extends BaseAggregationTestCase<FiltersAggregationBuil
|
||||
public void testRewrite() throws IOException {
|
||||
// test non-keyed filter that doesn't rewrite
|
||||
AggregationBuilder original = new FiltersAggregationBuilder("my-agg", new MatchAllQueryBuilder());
|
||||
original.setMetaData(Collections.singletonMap(randomAlphaOfLengthBetween(1, 20), randomAlphaOfLengthBetween(1, 20)));
|
||||
AggregationBuilder rewritten = original.rewrite(new QueryRewriteContext(xContentRegistry(), null, null, () -> 0L));
|
||||
assertSame(original, rewritten);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user