diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-06-09 12:15:43 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-06-09 12:15:43 +0200 |
commit | 20513f2cb1f9c65406c32dd717e738d394fc1d1b (patch) | |
tree | 8801ffcd7fb2f7f31f66f2ce4db99c6752b909ef /container-search/src/main/java/com/yahoo/search/searchchain | |
parent | 79cd883d5df45dc236e5cebf2c21b5487c791df6 (diff) |
Extract execution creation into ExecutionFactory
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/searchchain')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java b/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java new file mode 100644 index 00000000000..470e74bb974 --- /dev/null +++ b/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java @@ -0,0 +1,79 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.search.searchchain; + +import com.yahoo.component.AbstractComponent; +import com.yahoo.component.chain.Chain; +import com.yahoo.component.chain.ChainsConfigurer; +import com.yahoo.component.chain.model.ChainsModel; +import com.yahoo.component.chain.model.ChainsModelBuilder; +import com.yahoo.component.provider.ComponentRegistry; +import com.yahoo.container.QrSearchersConfig; +import com.yahoo.container.core.ChainsConfig; +import com.yahoo.language.Linguistics; +import com.yahoo.prelude.IndexFacts; +import com.yahoo.prelude.IndexModel; +import com.yahoo.prelude.query.parser.SpecialTokenRegistry; +import com.yahoo.processing.rendering.Renderer; +import com.yahoo.search.Searcher; +import com.yahoo.search.config.IndexInfoConfig; +import com.yahoo.search.rendering.RendererRegistry; +import com.yahoo.vespa.configdefinition.SpecialtokensConfig; + +/** + * Provides creation of fully configured query Execution instances. + * Have an instance of this injected if you need to execute queries which are not initiated from + * an external request. + * + * @author bratseth + */ +public class ExecutionFactory extends AbstractComponent { + + private final SearchChainRegistry searchChainRegistry; + private final IndexFacts indexFacts; + private final SpecialTokenRegistry specialTokens; + private final Linguistics linguistics; + private final RendererRegistry rendererRegistry; + + public ExecutionFactory(ChainsConfig chainsConfig, + IndexInfoConfig indexInfo, + QrSearchersConfig clusters, + ComponentRegistry<Searcher> searchers, + SpecialtokensConfig specialTokens, + Linguistics linguistics, + ComponentRegistry<Renderer> renderers) { + this.searchChainRegistry = createSearchChainRegistry(searchers, chainsConfig); + this.indexFacts = new IndexFacts(new IndexModel(indexInfo, clusters)).freeze(); + this.specialTokens = new SpecialTokenRegistry(specialTokens); + this.linguistics = linguistics; + this.rendererRegistry = new RendererRegistry(renderers.allComponents()); + } + + private SearchChainRegistry createSearchChainRegistry(ComponentRegistry<Searcher> searchers, ChainsConfig chainsConfig) { + SearchChainRegistry searchChainRegistry = new SearchChainRegistry(searchers); + ChainsModel chainsModel = ChainsModelBuilder.buildFromConfig(chainsConfig); + ChainsConfigurer.prepareChainRegistry(searchChainRegistry, chainsModel, searchers); + searchChainRegistry.freeze(); + return searchChainRegistry; + } + + /** + * Creates a new execution starting at a search chain. + * An execution instance should be used once to execute a (tree of) search chains. + */ + public Execution newExecution(Chain<? extends Searcher> searchChain) { + return new Execution(searchChain, + new Execution.Context(searchChainRegistry, indexFacts, specialTokens, rendererRegistry, linguistics)); + } + + /** Returns the search chain registry used by this */ + public SearchChainRegistry searchChainRegistry() { return searchChainRegistry; } + + /** Returns the renderers known to this */ + public RendererRegistry rendererRegistry() { return rendererRegistry; } + + @Override + public void deconstruct() { + rendererRegistry.deconstruct(); + } + +} |