diff --git a/core/src/main/java/org/elasticsearch/search/SearchModule.java b/core/src/main/java/org/elasticsearch/search/SearchModule.java index f6497d3450d..06b09e6e744 100644 --- a/core/src/main/java/org/elasticsearch/search/SearchModule.java +++ b/core/src/main/java/org/elasticsearch/search/SearchModule.java @@ -142,6 +142,7 @@ import org.elasticsearch.search.aggregations.bucket.sampler.SamplerAggregatorBui import org.elasticsearch.search.aggregations.bucket.sampler.UnmappedSampler; import org.elasticsearch.search.aggregations.bucket.significant.SignificantLongTerms; import org.elasticsearch.search.aggregations.bucket.significant.SignificantStringTerms; +import org.elasticsearch.search.aggregations.bucket.significant.SignificantTermsAggregatorBuilder; import org.elasticsearch.search.aggregations.bucket.significant.SignificantTermsParser; import org.elasticsearch.search.aggregations.bucket.significant.UnmappedSignificantTerms; import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristicParser; @@ -469,7 +470,9 @@ public class SearchModule extends AbstractModule { registerAggregation(DiversifiedAggregatorBuilder::new, new DiversifiedSamplerParser(), DiversifiedAggregatorBuilder.AGGREGATION_NAME_FIELD); registerAggregation(TermsAggregatorBuilder::new, new TermsParser(), TermsAggregatorBuilder.AGGREGATION_NAME_FIELD); - registerAggregatorParser(new SignificantTermsParser(significanceHeuristicParserMapper, queryParserRegistry)); + registerAggregation(SignificantTermsAggregatorBuilder::new, + new SignificantTermsParser(significanceHeuristicParserMapper, queryParserRegistry), + SignificantTermsAggregatorBuilder.AGGREGATION_NAME_FIELD); registerAggregation(RangeAggregatorBuilder::new, new RangeParser(), RangeAggregatorBuilder.AGGREGATION_NAME_FIELD); registerAggregation(DateRangeAggregatorBuilder::new, new DateRangeParser(), DateRangeAggregatorBuilder.AGGREGATION_NAME_FIELD); registerAggregation(IPv4RangeAggregatorBuilder::new, new IpRangeParser(), IPv4RangeAggregatorBuilder.AGGREGATION_NAME_FIELD); diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorBuilder.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorBuilder.java index f5a167cb943..4019cd21b05 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorBuilder.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsAggregatorBuilder.java @@ -21,12 +21,10 @@ package org.elasticsearch.search.aggregations.bucket.significant; import org.elasticsearch.common.ParseField; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.elasticsearch.common.lucene.index.FilterableTermsEnum; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.index.mapper.MappedFieldType; import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.AggregatorFactories.Builder; +import org.elasticsearch.search.aggregations.AggregatorFactory; import org.elasticsearch.search.aggregations.bucket.significant.heuristics.JLHScore; import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristic; import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificanceHeuristicStreams; @@ -41,6 +39,7 @@ import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorBuild import org.elasticsearch.search.aggregations.support.ValuesSourceAggregatorFactory; import org.elasticsearch.search.aggregations.support.ValuesSourceConfig; import org.elasticsearch.search.aggregations.support.ValuesSourceType; + import java.io.IOException; import java.util.Objects; @@ -48,6 +47,8 @@ import java.util.Objects; * */ public class SignificantTermsAggregatorBuilder extends ValuesSourceAggregatorBuilder { + public static final String NAME = SignificantStringTerms.TYPE.name(); + public static final ParseField AGGREGATION_NAME_FIELD = new ParseField(NAME); static final ParseField BACKGROUND_FILTER = new ParseField("background_filter"); static final ParseField HEURISTIC = new ParseField("significance_heuristic"); @@ -55,26 +56,63 @@ public class SignificantTermsAggregatorBuilder extends ValuesSourceAggregatorBui static final TermsAggregator.BucketCountThresholds DEFAULT_BUCKET_COUNT_THRESHOLDS = new TermsAggregator.BucketCountThresholds( 3, 0, 10, -1); - static final SignificantTermsAggregatorBuilder PROTOTYPE = new SignificantTermsAggregatorBuilder("", null); - private IncludeExclude includeExclude = null; private String executionHint = null; - private String indexedFieldName; - private MappedFieldType fieldType; - private FilterableTermsEnum termsEnum; - private int numberOfAggregatorsCreated = 0; private QueryBuilder filterBuilder = null; private TermsAggregator.BucketCountThresholds bucketCountThresholds = new BucketCountThresholds(DEFAULT_BUCKET_COUNT_THRESHOLDS); private SignificanceHeuristic significanceHeuristic = JLHScore.PROTOTYPE; - protected TermsAggregator.BucketCountThresholds getBucketCountThresholds() { - return new TermsAggregator.BucketCountThresholds(bucketCountThresholds); - } - public SignificantTermsAggregatorBuilder(String name, ValueType valueType) { super(name, SignificantStringTerms.TYPE, ValuesSourceType.ANY, valueType); } + /** + * Read from a Stream. + */ + public SignificantTermsAggregatorBuilder(StreamInput in) throws IOException { + super(in, SignificantStringTerms.TYPE, ValuesSourceType.ANY); + bucketCountThresholds = BucketCountThresholds.readFromStream(in); + executionHint = in.readOptionalString(); + if (in.readBoolean()) { + filterBuilder = in.readQuery(); + } + if (in.readBoolean()) { + includeExclude = IncludeExclude.readFromStream(in); + } + significanceHeuristic = SignificanceHeuristicStreams.read(in); + } + + @Override + protected void innerWriteTo(StreamOutput out) throws IOException { + bucketCountThresholds.writeTo(out); + out.writeOptionalString(executionHint); + boolean hasfilterBuilder = filterBuilder != null; + out.writeBoolean(hasfilterBuilder); + if (hasfilterBuilder) { + out.writeQuery(filterBuilder); + } + boolean hasIncExc = includeExclude != null; + out.writeBoolean(hasIncExc); + if (hasIncExc) { + includeExclude.writeTo(out); + } + SignificanceHeuristicStreams.writeTo(significanceHeuristic, out); + } + + @Override + protected boolean usesNewStyleSerialization() { + return true; + } + + @Override + protected boolean serializeTargetValueType() { + return true; + } + + protected TermsAggregator.BucketCountThresholds getBucketCountThresholds() { + return new TermsAggregator.BucketCountThresholds(bucketCountThresholds); + } + public TermsAggregator.BucketCountThresholds bucketCountThresholds() { return bucketCountThresholds; } @@ -217,39 +255,6 @@ public class SignificantTermsAggregatorBuilder extends ValuesSourceAggregatorBui return builder; } - @Override - protected SignificantTermsAggregatorBuilder innerReadFrom(String name, ValuesSourceType valuesSourceType, - ValueType targetValueType, StreamInput in) throws IOException { - SignificantTermsAggregatorBuilder factory = new SignificantTermsAggregatorBuilder(name, targetValueType); - factory.bucketCountThresholds = BucketCountThresholds.readFromStream(in); - factory.executionHint = in.readOptionalString(); - if (in.readBoolean()) { - factory.filterBuilder = in.readQuery(); - } - if (in.readBoolean()) { - factory.includeExclude = IncludeExclude.readFromStream(in); - } - factory.significanceHeuristic = SignificanceHeuristicStreams.read(in); - return factory; - } - - @Override - protected void innerWriteTo(StreamOutput out) throws IOException { - bucketCountThresholds.writeTo(out); - out.writeOptionalString(executionHint); - boolean hasfilterBuilder = filterBuilder != null; - out.writeBoolean(hasfilterBuilder); - if (hasfilterBuilder) { - out.writeQuery(filterBuilder); - } - boolean hasIncExc = includeExclude != null; - out.writeBoolean(hasIncExc); - if (hasIncExc) { - includeExclude.writeTo(out); - } - SignificanceHeuristicStreams.writeTo(significanceHeuristic, out); - } - @Override protected int innerHashCode() { return Objects.hash(bucketCountThresholds, executionHint, filterBuilder, includeExclude, significanceHeuristic); @@ -264,4 +269,9 @@ public class SignificantTermsAggregatorBuilder extends ValuesSourceAggregatorBui && Objects.equals(includeExclude, other.includeExclude) && Objects.equals(significanceHeuristic, other.significanceHeuristic); } + + @Override + public String getWriteableName() { + return NAME; + } } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java index 6f761ab752a..5d809f0338d 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/SignificantTermsParser.java @@ -52,11 +52,6 @@ public class SignificantTermsParser extends AbstractTermsParser { this.queriesRegistry = queriesRegistry; } - @Override - public String type() { - return SignificantStringTerms.TYPE.name(); - } - @Override protected SignificantTermsAggregatorBuilder doCreateFactory(String aggregationName, ValuesSourceType valuesSourceType, ValueType targetValueType, BucketCountThresholds bucketCountThresholds, SubAggCollectionMode collectMode, String executionHint, @@ -103,11 +98,6 @@ public class SignificantTermsParser extends AbstractTermsParser { return false; } - @Override - public SignificantTermsAggregatorBuilder getFactoryPrototypes() { - return SignificantTermsAggregatorBuilder.PROTOTYPE; - } - @Override protected BucketCountThresholds getDefaultBucketCountThresholds() { return new TermsAggregator.BucketCountThresholds(SignificantTermsAggregatorBuilder.DEFAULT_BUCKET_COUNT_THRESHOLDS);