diff options
author | Tanguy Leroux <tlrx.dev@gmail.com> | 2017-06-02 09:45:15 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-02 09:45:15 +0200 |
commit | 528bd25fa704da1d234ed364503891c93c6b9d31 (patch) | |
tree | bcb16d48cc7a805b431522646375933ec4e2774e /core/src/main/java/org/elasticsearch/search | |
parent | f4aee1e583b3a6ad17e879cb3503689726f37679 (diff) |
Add superset size to Significant Term REST response (#24865)
This commit adds a new bg_count field to the REST response of
SignificantTerms aggregations. Similarly to the bg_count that already
exists in significant terms buckets, this new bg_count field is set at
the aggregation level and is populated with the superset size value.
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search')
5 files changed, 53 insertions, 11 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalMappedSignificantTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalMappedSignificantTerms.java index da346a8a1e..e1bd4defd3 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalMappedSignificantTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalMappedSignificantTerms.java @@ -128,6 +128,7 @@ public abstract class InternalMappedSignificantTerms< @Override public XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException { builder.field(CommonFields.DOC_COUNT.getPreferredName(), subsetSize); + builder.field(BG_COUNT, supersetSize); builder.startArray(CommonFields.BUCKETS.getPreferredName()); for (Bucket bucket : buckets) { //There is a condition (presumably when only one shard has a bucket?) where reduce is not called diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantLongTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantLongTerms.java index 2d512632f5..9592d80c77 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantLongTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantLongTerms.java @@ -39,9 +39,7 @@ public class ParsedSignificantLongTerms extends ParsedSignificantTerms { } public static ParsedSignificantLongTerms fromXContent(XContentParser parser, String name) throws IOException { - ParsedSignificantLongTerms aggregation = PARSER.parse(parser, null); - aggregation.setName(name); - return aggregation; + return parseSignificantTermsXContent(() -> PARSER.parse(parser, null), name); } public static class ParsedBucket extends ParsedSignificantTerms.ParsedBucket { diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantStringTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantStringTerms.java index fb1c7728e0..008a5a28e5 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantStringTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantStringTerms.java @@ -40,9 +40,7 @@ public class ParsedSignificantStringTerms extends ParsedSignificantTerms { } public static ParsedSignificantStringTerms fromXContent(XContentParser parser, String name) throws IOException { - ParsedSignificantStringTerms aggregation = PARSER.parse(parser, null); - aggregation.setName(name); - return aggregation; + return parseSignificantTermsXContent(() -> PARSER.parse(parser, null), name); } public static class ParsedBucket extends ParsedSignificantTerms.ParsedBucket { diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantTerms.java index 56be0aa607..8991ca0993 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantTerms.java @@ -21,6 +21,8 @@ package org.elasticsearch.search.aggregations.bucket.significant; import org.elasticsearch.common.CheckedBiConsumer; import org.elasticsearch.common.CheckedFunction; +import org.elasticsearch.common.CheckedSupplier; +import org.elasticsearch.common.ParseField; import org.elasticsearch.common.xcontent.ObjectParser; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; @@ -42,11 +44,16 @@ public abstract class ParsedSignificantTerms extends ParsedMultiBucketAggregatio private Map<String, ParsedBucket> bucketMap; protected long subsetSize; + protected long supersetSize; protected long getSubsetSize() { return subsetSize; } + protected long getSupersetSize() { + return supersetSize; + } + @Override public List<? extends SignificantTerms.Bucket> getBuckets() { return buckets; @@ -68,6 +75,7 @@ public abstract class ParsedSignificantTerms extends ParsedMultiBucketAggregatio @Override protected XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException { builder.field(CommonFields.DOC_COUNT.getPreferredName(), subsetSize); + builder.field(InternalMappedSignificantTerms.BG_COUNT, supersetSize); builder.startArray(CommonFields.BUCKETS.getPreferredName()); for (SignificantTerms.Bucket bucket : buckets) { bucket.toXContent(builder, params); @@ -76,16 +84,31 @@ public abstract class ParsedSignificantTerms extends ParsedMultiBucketAggregatio return builder; } + static <T extends ParsedSignificantTerms> T parseSignificantTermsXContent(final CheckedSupplier<T, IOException> aggregationSupplier, + final String name) throws IOException { + T aggregation = aggregationSupplier.get(); + aggregation.setName(name); + for (ParsedBucket bucket : aggregation.buckets) { + bucket.subsetSize = aggregation.subsetSize; + bucket.supersetSize = aggregation.supersetSize; + } + return aggregation; + } + static void declareParsedSignificantTermsFields(final ObjectParser<? extends ParsedSignificantTerms, Void> objectParser, final CheckedFunction<XContentParser, ParsedSignificantTerms.ParsedBucket, IOException> bucketParser) { declareMultiBucketAggregationFields(objectParser, bucketParser::apply, bucketParser::apply); objectParser.declareLong((parsedTerms, value) -> parsedTerms.subsetSize = value , CommonFields.DOC_COUNT); + objectParser.declareLong((parsedTerms, value) -> parsedTerms.supersetSize = value , + new ParseField(InternalMappedSignificantTerms.BG_COUNT)); } public abstract static class ParsedBucket extends ParsedMultiBucketAggregation.ParsedBucket implements SignificantTerms.Bucket { protected long subsetDf; + protected long subsetSize; protected long supersetDf; + protected long supersetSize; protected double score; @Override @@ -110,12 +133,12 @@ public abstract class ParsedSignificantTerms extends ParsedMultiBucketAggregatio @Override public long getSupersetSize() { - throw new UnsupportedOperationException(); + return supersetSize; } @Override public long getSubsetSize() { - throw new UnsupportedOperationException(); + return subsetSize; } @Override diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTerms.java index 8c0da8b890..61cb4a9ca0 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTerms.java @@ -29,17 +29,39 @@ public interface SignificantTerms extends MultiBucketsAggregation, Iterable<Sign interface Bucket extends MultiBucketsAggregation.Bucket { + /** + * @return The significant score for the subset + */ double getSignificanceScore(); - Number getKeyAsNumber(); - + /** + * @return The number of docs in the subset containing a particular term. + * This number is equal to the document count of the bucket. + */ long getSubsetDf(); + /** + * @return The numbers of docs in the subset (also known as "foreground set"). + * This number is equal to the document count of the containing aggregation. + */ + long getSubsetSize(); + + /** + * @return The number of docs in the superset containing a particular term (also + * known as the "background count" of the bucket) + */ long getSupersetDf(); + /** + * @return The numbers of docs in the superset (ordinarily the background count + * of the containing aggregation). + */ long getSupersetSize(); - long getSubsetSize(); + /** + * @return The key, expressed as a number + */ + Number getKeyAsNumber(); } @Override |