aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-01-18 14:34:09 +0100
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-01-18 14:34:09 +0100
commit583feccee37112e4cfeac481f2a909bc84258cbc (patch)
tree1f4795b8d567e72e2ad9eb646b6b2037f748118f /config-model
parent185815c1ee460233d4d819a6688c5e3e81304d1b (diff)
Remove duplicate code pattern
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java120
1 files changed, 69 insertions, 51 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
index bb3ff0ac434..81797e5c5b3 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
@@ -7,13 +7,75 @@ import com.yahoo.searchdefinition.Search;
import com.yahoo.searchdefinition.processing.multifieldresolver.RankProfileTypeSettingsProcessor;
import com.yahoo.vespa.model.container.search.QueryProfiles;
+import java.util.Arrays;
+import java.util.List;
+
/**
* Executor of processors. This defines the right order of processor execution.
*
* @author bratseth
+ * @author bjorncs
*/
public class Processing {
+ private static final List<ProcessorFactory> factories = createProcessorFactories();
+
+ private static List<ProcessorFactory> createProcessorFactories() {
+ return Arrays.asList(
+ SearchMustHaveDocument::new,
+ UrlFieldValidator::new,
+ BuiltInFieldSets::new,
+ ReservedDocumentNames::new,
+ IndexFieldNames::new,
+ IntegerIndex2Attribute::new,
+ MakeAliases::new,
+ SetLanguage::new,
+ UriHack::new,
+ LiteralBoost::new,
+ IndexTo2FieldSet::new,
+ TagType::new,
+ IndexingInputs::new,
+ OptimizeIlscript::new,
+ ValidateFieldWithIndexSettingsCreatesIndex::new,
+ AttributesImplicitWord::new,
+ CreatePositionZCurve::new,
+ WordMatch::new,
+ DeprecateAttributePrefetch::new,
+ ImplicitSummaries::new,
+ ImplicitSummaryFields::new,
+ SummaryConsistency::new,
+ SummaryNamesFieldCollisions::new,
+ SummaryFieldsMustHaveValidSource::new,
+ MakeDefaultSummaryTheSuperSet::new,
+ Bolding::new,
+ AttributeProperties::new,
+ SetRankTypeEmptyOnFilters::new,
+ IndexSettingsNonFieldNames::new,
+ SummaryDynamicStructsArrays::new,
+ StringSettingsOnNonStringFields::new,
+ IndexingOutputs::new,
+ ExactMatch::new,
+ NGramMatch::new,
+ TextMatch::new,
+ MultifieldIndexHarmonizer::new,
+ FilterFieldNames::new,
+ MatchConsistency::new,
+ ValidateFieldTypes::new,
+ DisallowComplexMapAndWsetKeyTypes::new,
+ SortingSettings::new,
+ FieldSetValidity::new,
+ AddExtraFieldsToDocument::new,
+ PredicateProcessor::new,
+ MatchPhaseSettingsValidator::new,
+ DiversitySettingsValidator::new,
+ TensorFieldProcessor::new,
+ RankProfileTypeSettingsProcessor::new,
+
+ // These two should be last.
+ IndexingValidation::new,
+ IndexingValues::new);
+ }
+
/**
* Runs all search processors on the given {@link Search} object. These will modify the search object, <b>possibly
* exchanging it with another</b>, as well as its document types.
@@ -28,57 +90,13 @@ public class Processing {
RankProfileRegistry rankProfileRegistry,
QueryProfiles queryProfiles) {
search.process();
- new SearchMustHaveDocument(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new UrlFieldValidator(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new BuiltInFieldSets(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new ReservedDocumentNames(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new IndexFieldNames(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new IntegerIndex2Attribute(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new MakeAliases(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new SetLanguage(search, deployLogger, rankProfileRegistry, queryProfiles).process(); // Needs to come before UriHack, see ticket 6405470
- new UriHack(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new LiteralBoost(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new IndexTo2FieldSet(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new TagType(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new IndexingInputs(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new OptimizeIlscript(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new ValidateFieldWithIndexSettingsCreatesIndex(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new AttributesImplicitWord(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new CreatePositionZCurve(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new WordMatch(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new DeprecateAttributePrefetch(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new ImplicitSummaries(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new ImplicitSummaryFields(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new SummaryConsistency(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new SummaryNamesFieldCollisions(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new SummaryFieldsMustHaveValidSource(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new MakeDefaultSummaryTheSuperSet(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new Bolding(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new AttributeProperties(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new SetRankTypeEmptyOnFilters(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new IndexSettingsNonFieldNames(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new SummaryDynamicStructsArrays(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new StringSettingsOnNonStringFields(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new IndexingOutputs(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new ExactMatch(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new NGramMatch(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new TextMatch(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new MultifieldIndexHarmonizer(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new FilterFieldNames(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new MatchConsistency(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new ValidateFieldTypes(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new DisallowComplexMapAndWsetKeyTypes(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new SortingSettings(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new FieldSetValidity(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new AddExtraFieldsToDocument(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new PredicateProcessor(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new MatchPhaseSettingsValidator(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new DiversitySettingsValidator(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new TensorFieldProcessor(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new RankProfileTypeSettingsProcessor(search, deployLogger, rankProfileRegistry, queryProfiles).process();
+ factories.stream()
+ .map(factory -> factory.create(search, deployLogger, rankProfileRegistry, queryProfiles))
+ .forEach(Processor::process);
+ }
- // These two should be last.
- new IndexingValidation(search, deployLogger, rankProfileRegistry, queryProfiles).process();
- new IndexingValues(search, deployLogger, rankProfileRegistry, queryProfiles).process();
+ @FunctionalInterface
+ public interface ProcessorFactory {
+ Processor create(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles);
}
}