summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/search
diff options
context:
space:
mode:
authorTanguy Leroux <tlrx.dev@gmail.com>2017-06-02 09:45:15 +0200
committerGitHub <noreply@github.com>2017-06-02 09:45:15 +0200
commit528bd25fa704da1d234ed364503891c93c6b9d31 (patch)
treebcb16d48cc7a805b431522646375933ec4e2774e /core/src/main/java/org/elasticsearch/search
parentf4aee1e583b3a6ad17e879cb3503689726f37679 (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')
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalMappedSignificantTerms.java1
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantLongTerms.java4
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantStringTerms.java4
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/ParsedSignificantTerms.java27
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTerms.java28
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