From 13b5e32bec558b76d842102b5c262d6f38de885c Mon Sep 17 00:00:00 2001 From: Colin Goodheart-Smithe Date: Wed, 24 Sep 2014 11:20:10 +0100 Subject: [PATCH] Aggregations: Significant Terms Heuristics now registered correctly Closes #7840 --- .../elasticsearch/search/SearchModule.java | 3 +- .../aggregations/AggregationModule.java | 11 +++- .../TransportAggregationModule.java | 11 +++- .../SignificantTermsHeuristicModule.java | 11 ++-- ...nsportSignificantTermsHeuristicModule.java | 50 +++++++++++++++++++ ...ignificantTermsSignificanceScoreTests.java | 6 ++- 6 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/TransportSignificantTermsHeuristicModule.java diff --git a/src/main/java/org/elasticsearch/search/SearchModule.java b/src/main/java/org/elasticsearch/search/SearchModule.java index 47add08b78559..434cec2ef3144 100644 --- a/src/main/java/org/elasticsearch/search/SearchModule.java +++ b/src/main/java/org/elasticsearch/search/SearchModule.java @@ -27,7 +27,6 @@ import org.elasticsearch.index.search.morelikethis.MoreLikeThisFetchService; import org.elasticsearch.search.action.SearchServiceTransportAction; import org.elasticsearch.search.aggregations.AggregationModule; -import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificantTermsHeuristicModule; import org.elasticsearch.search.controller.SearchPhaseController; import org.elasticsearch.search.dfs.DfsPhase; import org.elasticsearch.search.facet.FacetModule; @@ -51,7 +50,7 @@ public class SearchModule extends AbstractModule implements SpawnModules { @Override public Iterable spawnModules() { - return ImmutableList.of(new TransportSearchModule(), new FacetModule(), new HighlightModule(), new SuggestModule(), new FunctionScoreModule(), new AggregationModule(), new SignificantTermsHeuristicModule()); + return ImmutableList.of(new TransportSearchModule(), new FacetModule(), new HighlightModule(), new SuggestModule(), new FunctionScoreModule(), new AggregationModule()); } @Override diff --git a/src/main/java/org/elasticsearch/search/aggregations/AggregationModule.java b/src/main/java/org/elasticsearch/search/aggregations/AggregationModule.java index 6af5c320a2a08..02eb77eac49f6 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/AggregationModule.java +++ b/src/main/java/org/elasticsearch/search/aggregations/AggregationModule.java @@ -18,8 +18,11 @@ */ package org.elasticsearch.search.aggregations; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import org.elasticsearch.common.inject.AbstractModule; +import org.elasticsearch.common.inject.Module; +import org.elasticsearch.common.inject.SpawnModules; import org.elasticsearch.common.inject.multibindings.Multibinder; import org.elasticsearch.search.aggregations.bucket.filter.FilterParser; import org.elasticsearch.search.aggregations.bucket.geogrid.GeoHashGridParser; @@ -34,6 +37,7 @@ import org.elasticsearch.search.aggregations.bucket.range.geodistance.GeoDistanceParser; import org.elasticsearch.search.aggregations.bucket.range.ipv4.IpRangeParser; import org.elasticsearch.search.aggregations.bucket.significant.SignificantTermsParser; +import org.elasticsearch.search.aggregations.bucket.significant.heuristics.SignificantTermsHeuristicModule; import org.elasticsearch.search.aggregations.bucket.terms.TermsParser; import org.elasticsearch.search.aggregations.metrics.tophits.TopHitsParser; import org.elasticsearch.search.aggregations.metrics.avg.AvgParser; @@ -53,7 +57,7 @@ /** * The main module for the get (binding all get components together) */ -public class AggregationModule extends AbstractModule { +public class AggregationModule extends AbstractModule implements SpawnModules{ private List> parsers = Lists.newArrayList(); @@ -107,4 +111,9 @@ protected void configure() { bind(AggregationPhase.class).asEagerSingleton(); } + @Override + public Iterable spawnModules() { + return ImmutableList.of(new SignificantTermsHeuristicModule()); + } + } diff --git a/src/main/java/org/elasticsearch/search/aggregations/TransportAggregationModule.java b/src/main/java/org/elasticsearch/search/aggregations/TransportAggregationModule.java index abc39e70f035b..b5b407b79970a 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/TransportAggregationModule.java +++ b/src/main/java/org/elasticsearch/search/aggregations/TransportAggregationModule.java @@ -18,7 +18,10 @@ */ package org.elasticsearch.search.aggregations; +import com.google.common.collect.ImmutableList; import org.elasticsearch.common.inject.AbstractModule; +import org.elasticsearch.common.inject.Module; +import org.elasticsearch.common.inject.SpawnModules; import org.elasticsearch.search.aggregations.bucket.filter.InternalFilter; import org.elasticsearch.search.aggregations.bucket.geogrid.InternalGeoHashGrid; import org.elasticsearch.search.aggregations.bucket.global.InternalGlobal; @@ -34,6 +37,7 @@ import org.elasticsearch.search.aggregations.bucket.significant.SignificantLongTerms; import org.elasticsearch.search.aggregations.bucket.significant.SignificantStringTerms; import org.elasticsearch.search.aggregations.bucket.significant.UnmappedSignificantTerms; +import org.elasticsearch.search.aggregations.bucket.significant.heuristics.TransportSignificantTermsHeuristicModule; import org.elasticsearch.search.aggregations.bucket.terms.DoubleTerms; import org.elasticsearch.search.aggregations.bucket.terms.LongTerms; import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; @@ -54,7 +58,7 @@ /** * A module that registers all the transport streams for the addAggregation */ -public class TransportAggregationModule extends AbstractModule { +public class TransportAggregationModule extends AbstractModule implements SpawnModules { @Override protected void configure() { @@ -94,4 +98,9 @@ protected void configure() { InternalTopHits.registerStreams(); InternalGeoBounds.registerStream(); } + + @Override + public Iterable spawnModules() { + return ImmutableList.of(new TransportSignificantTermsHeuristicModule()); + } } diff --git a/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/SignificantTermsHeuristicModule.java b/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/SignificantTermsHeuristicModule.java index 147f7a2b86c56..24a72f42a036b 100644 --- a/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/SignificantTermsHeuristicModule.java +++ b/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/SignificantTermsHeuristicModule.java @@ -30,16 +30,14 @@ public class SignificantTermsHeuristicModule extends AbstractModule { private List> parsers = Lists.newArrayList(); - private List streams = Lists.newArrayList(); public SignificantTermsHeuristicModule() { - registerHeuristic(JLHScore.JLHScoreParser.class, JLHScore.STREAM); - registerHeuristic(MutualInformation.MutualInformationParser.class, MutualInformation.STREAM); + registerParser(JLHScore.JLHScoreParser.class); + registerParser(MutualInformation.MutualInformationParser.class); } - public void registerHeuristic(Class parser, SignificanceHeuristicStreams.Stream stream) { + public void registerParser(Class parser) { parsers.add(parser); - streams.add(stream); } @Override @@ -49,8 +47,5 @@ protected void configure() { parserMapBinder.addBinding().to(clazz); } bind(SignificanceHeuristicParserMapper.class); - for (SignificanceHeuristicStreams.Stream stream : streams) { - SignificanceHeuristicStreams.registerStream(stream, stream.getName()); - } } } diff --git a/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/TransportSignificantTermsHeuristicModule.java b/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/TransportSignificantTermsHeuristicModule.java new file mode 100644 index 0000000000000..efe1d31447326 --- /dev/null +++ b/src/main/java/org/elasticsearch/search/aggregations/bucket/significant/heuristics/TransportSignificantTermsHeuristicModule.java @@ -0,0 +1,50 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +package org.elasticsearch.search.aggregations.bucket.significant.heuristics; + +import com.google.common.collect.Lists; +import org.elasticsearch.common.inject.AbstractModule; + +import java.util.List; + + +public class TransportSignificantTermsHeuristicModule extends AbstractModule { + + private List streams = Lists.newArrayList(); + + public TransportSignificantTermsHeuristicModule() { + registerStream(JLHScore.STREAM); + registerStream(MutualInformation.STREAM); + registerStream(GND.STREAM); + registerStream(ChiSquare.STREAM); + } + + public void registerStream(SignificanceHeuristicStreams.Stream stream) { + streams.add(stream); + } + + @Override + protected void configure() { + for (SignificanceHeuristicStreams.Stream stream : streams) { + SignificanceHeuristicStreams.registerStream(stream, stream.getName()); + } + } +} diff --git a/src/test/java/org/elasticsearch/search/aggregations/bucket/SignificantTermsSignificanceScoreTests.java b/src/test/java/org/elasticsearch/search/aggregations/bucket/SignificantTermsSignificanceScoreTests.java index 65a4df82cce21..84e002b698c49 100644 --- a/src/test/java/org/elasticsearch/search/aggregations/bucket/SignificantTermsSignificanceScoreTests.java +++ b/src/test/java/org/elasticsearch/search/aggregations/bucket/SignificantTermsSignificanceScoreTests.java @@ -162,7 +162,11 @@ public String description() { } public void onModule(SignificantTermsHeuristicModule significanceModule) { - significanceModule.registerHeuristic(SimpleHeuristic.SimpleHeuristicParser.class, SimpleHeuristic.STREAM); + significanceModule.registerParser(SimpleHeuristic.SimpleHeuristicParser.class); + } + + public void onModule(TransportSignificantTermsHeuristicModule significanceModule) { + significanceModule.registerStream(SimpleHeuristic.STREAM); } }