From 578223f6792d65588ae6d83fbc4684ac63ff3b2b Mon Sep 17 00:00:00 2001 From: Tanguy Leroux Date: Mon, 15 May 2017 15:14:07 +0200 Subject: Make SignificantTerms.Bucket an interface rather than an abstract class (#24670) This commit changes SignificantTerms.Bucket so that it is not an abstract class anymore but an interface. It will be easier for the Java High Level Rest Client to provide its own implementation of SignificantTerms and SignificantTerms.Bucket. Also, it is now more coherent with the others aggregations. --- .../InternalMappedSignificantTerms.java | 8 +++- .../significant/InternalSignificantTerms.java | 36 ++++++++-------- .../bucket/significant/SignificantLongTerms.java | 2 +- .../bucket/significant/SignificantStringTerms.java | 3 +- .../bucket/significant/SignificantTerms.java | 48 ++++------------------ .../significant/UnmappedSignificantTerms.java | 10 ++++- 6 files changed, 45 insertions(+), 62 deletions(-) (limited to 'core/src/main/java/org/elasticsearch/search/aggregations') 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 34fada101f..e8d856ebf2 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 @@ -26,6 +26,7 @@ import org.elasticsearch.search.aggregations.bucket.significant.heuristics.Signi import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import java.io.IOException; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -74,7 +75,12 @@ public abstract class InternalMappedSignificantTerms< } @Override - protected List getBucketsInternal() { + public Iterator iterator() { + return buckets.stream().map(bucket -> (SignificantTerms.Bucket) bucket).collect(Collectors.toList()).iterator(); + } + + @Override + public List getBuckets() { return buckets; } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalSignificantTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalSignificantTerms.java index 6414a5eb82..82ba2826dc 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalSignificantTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/InternalSignificantTerms.java @@ -33,20 +33,19 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; -import static java.util.Collections.unmodifiableList; - /** * Result of the significant terms aggregation. */ public abstract class InternalSignificantTerms, B extends InternalSignificantTerms.Bucket> extends InternalMultiBucketAggregation implements SignificantTerms, ToXContent { + @SuppressWarnings("PMD.ConstructorCallsOverridableMethod") - public abstract static class Bucket> extends SignificantTerms.Bucket { + public abstract static class Bucket> extends InternalMultiBucketAggregation.InternalBucket + implements SignificantTerms.Bucket { /** * Reads a bucket. Should be a constructor reference. */ @@ -55,14 +54,21 @@ public abstract class InternalSignificantTerms iterator() { - return getBuckets().iterator(); - } - - @Override - public List getBuckets() { - return unmodifiableList(getBucketsInternal()); - } - - protected abstract List getBucketsInternal(); + public abstract List getBuckets(); @Override public InternalAggregation doReduce(List aggregations, ReduceContext reduceContext) { @@ -206,7 +204,7 @@ public abstract class InternalSignificantTerms terms = (InternalSignificantTerms) aggregation; - for (B bucket : terms.getBucketsInternal()) { + for (B bucket : terms.getBuckets()) { List existingBuckets = buckets.get(bucket.getKeyAsString()); if (existingBuckets == null) { existingBuckets = new ArrayList<>(aggregations.size()); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantLongTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantLongTerms.java index 6a714a6b03..c1556609f1 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantLongTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantLongTerms.java @@ -77,7 +77,7 @@ public class SignificantLongTerms extends InternalMappedSignificantTerms { - abstract class Bucket extends InternalMultiBucketAggregation.InternalBucket { - long subsetDf; - long subsetSize; - long supersetDf; - long supersetSize; + interface Bucket extends MultiBucketsAggregation.Bucket { - Bucket(long subsetDf, long subsetSize, long supersetDf, long supersetSize) { - this.subsetSize = subsetSize; - this.supersetSize = supersetSize; - this.subsetDf = subsetDf; - this.supersetDf = supersetDf; - } + double getSignificanceScore(); - /** - * Read from a stream. - */ - protected Bucket(StreamInput in, long subsetSize, long supersetSize) { - this.subsetSize = subsetSize; - this.supersetSize = supersetSize; - } + Number getKeyAsNumber(); - abstract int compareTerm(SignificantTerms.Bucket other); + long getSubsetDf(); - public abstract double getSignificanceScore(); + long getSupersetDf(); - abstract Number getKeyAsNumber(); + long getSupersetSize(); - public long getSubsetDf() { - return subsetDf; - } - - public long getSupersetDf() { - return supersetDf; - } - - public long getSupersetSize() { - return supersetSize; - } - - public long getSubsetSize() { - return subsetSize; - } + long getSubsetSize(); + int compareTerm(SignificantTerms.Bucket other); } @Override - List getBuckets(); + List getBuckets(); /** * Get the bucket for the given term, or null if there is no such bucket. diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/UnmappedSignificantTerms.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/UnmappedSignificantTerms.java index f9d8375af8..7252909bf1 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/UnmappedSignificantTerms.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/UnmappedSignificantTerms.java @@ -31,15 +31,18 @@ import org.elasticsearch.search.aggregations.bucket.terms.UnmappedTerms; import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator; import java.io.IOException; +import java.util.Iterator; import java.util.List; import java.util.Map; +import static java.util.Collections.emptyIterator; import static java.util.Collections.emptyList; /** * Result of the running the significant terms aggregation on an unmapped field. */ public class UnmappedSignificantTerms extends InternalSignificantTerms { + public static final String NAME = "umsigterms"; /** @@ -117,7 +120,12 @@ public class UnmappedSignificantTerms extends InternalSignificantTerms getBucketsInternal() { + public Iterator iterator() { + return emptyIterator(); + } + + @Override + public List getBuckets() { return emptyList(); } -- cgit v1.2.3