summaryrefslogtreecommitdiffstats
path: root/docprocs
diff options
context:
space:
mode:
authorLester Solbakken <lesters@oath.com>2022-03-21 14:16:15 +0100
committerLester Solbakken <lesters@oath.com>2022-03-21 14:16:15 +0100
commitc5e464f1a6da3a74113d775805187a547074a2da (patch)
treedab30afcde250b686d85472f9e2b46d28c9e2184 /docprocs
parent24555fae4aac0dadde821cac0b7cf85321027bce (diff)
Add embedder selection argument to indexing language
Diffstat (limited to 'docprocs')
-rw-r--r--docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java25
-rw-r--r--docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java10
-rw-r--r--docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java3
-rw-r--r--docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java9
4 files changed, 31 insertions, 16 deletions
diff --git a/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java b/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java
index 7b553383daf..87c78445b13 100644
--- a/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java
+++ b/docprocs/src/main/java/com/yahoo/docprocs/indexing/IndexingProcessor.java
@@ -7,6 +7,7 @@ import com.google.inject.Inject;
import com.yahoo.component.chain.dependencies.After;
import com.yahoo.component.chain.dependencies.Before;
import com.yahoo.component.chain.dependencies.Provides;
+import com.yahoo.component.provider.ComponentRegistry;
import com.yahoo.docproc.DocumentProcessor;
import com.yahoo.docproc.Processing;
import com.yahoo.document.Document;
@@ -15,18 +16,20 @@ import com.yahoo.document.DocumentPut;
import com.yahoo.document.DocumentRemove;
import com.yahoo.document.DocumentType;
import com.yahoo.document.DocumentTypeManager;
-import com.yahoo.document.DocumentTypeManagerConfigurer;
import com.yahoo.document.DocumentUpdate;
-import com.yahoo.document.config.DocumentmanagerConfig;
import com.yahoo.language.Linguistics;
-import java.util.logging.Level;
-
import com.yahoo.language.process.Embedder;
+import com.yahoo.language.provider.DefaultEmbedderProvider;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
import com.yahoo.vespa.indexinglanguage.AdapterFactory;
import com.yahoo.vespa.indexinglanguage.SimpleAdapterFactory;
import com.yahoo.vespa.indexinglanguage.expressions.Expression;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.stream.Collectors;
+
+
/**
* @author Simon Thoresen Hult
*/
@@ -55,9 +58,9 @@ public class IndexingProcessor extends DocumentProcessor {
public IndexingProcessor(DocumentTypeManager documentTypeManager,
IlscriptsConfig ilscriptsConfig,
Linguistics linguistics,
- Embedder embedder) {
+ ComponentRegistry<Embedder> embedders) {
docTypeMgr = documentTypeManager;
- scriptMgr = new ScriptManager(docTypeMgr, ilscriptsConfig, linguistics, embedder);
+ scriptMgr = new ScriptManager(docTypeMgr, ilscriptsConfig, linguistics, toMap(embedders));
adapterFactory = new SimpleAdapterFactory(new ExpressionSelector());
}
@@ -128,4 +131,14 @@ public class IndexingProcessor extends DocumentProcessor {
out.add(prev);
}
+ private Map<String, Embedder> toMap(ComponentRegistry<Embedder> embedders) {
+ var map = embedders.allComponentsById().entrySet().stream()
+ .collect(Collectors.toMap(e -> e.getKey().stringValue(), Map.Entry::getValue));
+ if (map.size() > 1) {
+ map.remove(DefaultEmbedderProvider.class.getName());
+ // Ideally, this should be handled by dependency injection, however for now this workaround is necessary.
+ }
+ return map;
+ }
+
}
diff --git a/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java b/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java
index 63c6d6c4bb5..de3a429e357 100644
--- a/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java
+++ b/docprocs/src/main/java/com/yahoo/docprocs/indexing/ScriptManager.java
@@ -28,12 +28,12 @@ public class ScriptManager {
private final Map<String, Map<String, DocumentScript>> documentFieldScripts;
private final DocumentTypeManager docTypeMgr;
- public ScriptManager(DocumentTypeManager docTypeMgr, IlscriptsConfig config, Linguistics linguistics, Embedder embedder) {
+ public ScriptManager(DocumentTypeManager docTypeMgr, IlscriptsConfig config, Linguistics linguistics,
+ Map<String, Embedder> embedders) {
this.docTypeMgr = docTypeMgr;
- documentFieldScripts = createScriptsMap(docTypeMgr, config, linguistics, embedder);
+ documentFieldScripts = createScriptsMap(docTypeMgr, config, linguistics, embedders);
}
-
private Map<String, DocumentScript> getScripts(DocumentType inputType) {
Map<String, DocumentScript> scripts = documentFieldScripts.get(inputType.getName());
if (scripts != null) {
@@ -75,9 +75,9 @@ public class ScriptManager {
private static Map<String, Map<String, DocumentScript>> createScriptsMap(DocumentTypeManager docTypeMgr,
IlscriptsConfig config,
Linguistics linguistics,
- Embedder embedder) {
+ Map<String, Embedder> embedders) {
Map<String, Map<String, DocumentScript>> documentFieldScripts = new HashMap<>(config.ilscript().size());
- ScriptParserContext parserContext = new ScriptParserContext(linguistics, embedder);
+ ScriptParserContext parserContext = new ScriptParserContext(linguistics, embedders);
parserContext.getAnnotatorConfig().setMaxTermOccurrences(config.maxtermoccurrences());
parserContext.getAnnotatorConfig().setMaxTokenLength(config.fieldmatchmaxlength());
diff --git a/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java b/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java
index 13f9ea1a8c8..76f4578ac87 100644
--- a/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java
+++ b/docprocs/src/test/java/com/yahoo/docprocs/indexing/IndexingProcessorTestCase.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.docprocs.indexing;
+import com.yahoo.component.provider.ComponentRegistry;
import com.yahoo.config.subscription.ConfigGetter;
import com.yahoo.docproc.Processing;
import com.yahoo.document.Document;
@@ -128,6 +129,6 @@ public class IndexingProcessorTestCase {
return new IndexingProcessor(new DocumentTypeManager(ConfigGetter.getConfig(DocumentmanagerConfig.class, configId)),
ConfigGetter.getConfig(IlscriptsConfig.class, configId),
new SimpleLinguistics(),
- Embedder.throwsOnUse);
+ new ComponentRegistry<Embedder>());
}
}
diff --git a/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java b/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java
index a35dd0da4f3..4a7e643fb0a 100644
--- a/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java
+++ b/docprocs/src/test/java/com/yahoo/docprocs/indexing/ScriptManagerTestCase.java
@@ -9,6 +9,7 @@ import com.yahoo.vespa.indexinglanguage.parser.ParseException;
import org.junit.Test;
import java.util.Iterator;
+import java.util.Map;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -28,7 +29,7 @@ public class ScriptManagerTestCase {
IlscriptsConfig.Builder config = new IlscriptsConfig.Builder();
config.ilscript(new IlscriptsConfig.Ilscript.Builder().doctype("newssummary")
.content("input title | index title"));
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null, Embedder.throwsOnUse);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null, Embedder.throwsOnUse.asMap());
assertNotNull(scriptMgr.getScript(typeMgr.getDocumentType("newsarticle")));
assertNull(scriptMgr.getScript(new DocumentType("unknown")));
}
@@ -42,7 +43,7 @@ public class ScriptManagerTestCase {
IlscriptsConfig.Builder config = new IlscriptsConfig.Builder();
config.ilscript(new IlscriptsConfig.Ilscript.Builder().doctype("newsarticle")
.content("input title | index title"));
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null, Embedder.throwsOnUse);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(config), null, Embedder.throwsOnUse.asMap());
assertNotNull(scriptMgr.getScript(typeMgr.getDocumentType("newssummary")));
assertNull(scriptMgr.getScript(new DocumentType("unknown")));
}
@@ -50,14 +51,14 @@ public class ScriptManagerTestCase {
@Test
public void requireThatEmptyConfigurationDoesNotThrow() {
var typeMgr = DocumentTypeManager.fromFile("src/test/cfg/documentmanager_inherit.cfg");
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null, Embedder.throwsOnUse);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null, Embedder.throwsOnUse.asMap());
assertNull(scriptMgr.getScript(new DocumentType("unknown")));
}
@Test
public void requireThatUnknownDocumentTypeReturnsNull() {
var typeMgr = DocumentTypeManager.fromFile("src/test/cfg/documentmanager_inherit.cfg");
- ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null, Embedder.throwsOnUse);
+ ScriptManager scriptMgr = new ScriptManager(typeMgr, new IlscriptsConfig(new IlscriptsConfig.Builder()), null, Embedder.throwsOnUse.asMap());
for (Iterator<DocumentType> it = typeMgr.documentTypeIterator(); it.hasNext(); ) {
assertNull(scriptMgr.getScript(it.next()));
}