summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/searchchain
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-06-09 12:15:43 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-06-09 12:15:43 +0200
commit20513f2cb1f9c65406c32dd717e738d394fc1d1b (patch)
tree8801ffcd7fb2f7f31f66f2ce4db99c6752b909ef /container-search/src/main/java/com/yahoo/search/searchchain
parent79cd883d5df45dc236e5cebf2c21b5487c791df6 (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.java79
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();
+ }
+
+}