aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/fastsearch
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/fastsearch')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/BoolField.java1
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/ClusterParams.java29
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/IndexedBackend.java (renamed from container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java)34
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/SummaryParameters.java21
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java (renamed from container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java)74
5 files changed, 62 insertions, 97 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/BoolField.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/BoolField.java
index c0f42f6924b..6a980c37f4e 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/BoolField.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/BoolField.java
@@ -7,7 +7,6 @@
package com.yahoo.prelude.fastsearch;
import com.yahoo.data.access.Inspector;
-import com.yahoo.search.result.NanNumber;
/**
* @author bratseth
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/ClusterParams.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/ClusterParams.java
index c34187e576b..2987500fdb3 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/ClusterParams.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/ClusterParams.java
@@ -1,21 +1,40 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.prelude.fastsearch;
+import com.yahoo.search.schema.SchemaInfo;
+
/**
* Helper class for carrying around cluster-related
- * config parameters to the FastSearcher class.
+ * config parameters to the VespaBackend class.
*
* @author arnej27959
*/
public class ClusterParams {
- public final String searcherName;
+ private final String searcherName;
+ private final String serverId;
+ private final String defaultSummary;
+ private final DocumentdbInfoConfig documentdbInfoConfig;
+ private final SchemaInfo schemaInfo;
- /**
- * Make up full ClusterParams
- */
public ClusterParams(String name) {
+ this(name, "server.0", null, null, null);
+ }
+ public ClusterParams(String name, String serverId, String defaultSummary,
+ DocumentdbInfoConfig documentdbInfoConfig, SchemaInfo schemaInfo) {
this.searcherName = name;
+ this.serverId = serverId;
+ if (defaultSummary != null && defaultSummary.isEmpty())
+ this.defaultSummary = null;
+ else
+ this.defaultSummary = defaultSummary;
+ this.documentdbInfoConfig = documentdbInfoConfig;
+ this.schemaInfo = schemaInfo;
}
+ public String getServerId() { return serverId; }
+ public String getSearcherName() { return searcherName; }
+ public String getDefaultSummary() { return defaultSummary; }
+ public DocumentdbInfoConfig getDocumentdbInfoConfig() { return documentdbInfoConfig; }
+ public SchemaInfo getSchemaInfo() { return schemaInfo; }
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/IndexedBackend.java
index ddb36e007d3..9836934acc1 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/FastSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/IndexedBackend.java
@@ -1,8 +1,6 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.prelude.fastsearch;
-import com.yahoo.prelude.Ping;
-import com.yahoo.prelude.Pong;
import com.yahoo.prelude.querytransform.QueryRewrite;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
@@ -15,8 +13,6 @@ import com.yahoo.search.query.Ranking;
import com.yahoo.search.result.ErrorMessage;
import com.yahoo.search.result.Hit;
import com.yahoo.search.result.HitGroup;
-import com.yahoo.search.schema.SchemaInfo;
-import com.yahoo.search.searchchain.Execution;
import java.io.IOException;
import java.util.Optional;
@@ -33,7 +29,7 @@ import java.util.Optional;
// errors on results and returning them. It could be handy to create a QueryHandlingErrorException
// or similar which could wrap an error message, and then just always throw that and
// catch and unwrap into a results with an error in high level methods. -Jon
-public class FastSearcher extends VespaBackEndSearcher {
+public class IndexedBackend extends VespaBackend {
/** Used to dispatch directly to search nodes over RPC, replacing the old fnet communication path */
private final Dispatcher dispatcher;
@@ -41,34 +37,18 @@ public class FastSearcher extends VespaBackEndSearcher {
/**
* Creates a Fastsearcher.
*
- * @param serverId the resource pool used to create direct connections to the local search nodes when
- * bypassing the dispatch node
* @param dispatcher the dispatcher used (when enabled) to send summary requests over the rpc protocol.
* Eventually we will move everything to this protocol and never use dispatch nodes.
* At that point we won't need a cluster searcher above this to select and pass the right
* backend.
- * @param docSumParams document summary parameters
* @param clusterParams the cluster number, and other cluster backend parameters
- * @param documentdbInfoConfig document database parameters
*/
- public FastSearcher(String serverId,
- Dispatcher dispatcher,
- SummaryParameters docSumParams,
- ClusterParams clusterParams,
- DocumentdbInfoConfig documentdbInfoConfig,
- SchemaInfo schemaInfo) {
- init(serverId, docSumParams, clusterParams, documentdbInfoConfig, schemaInfo);
+ public IndexedBackend(ClusterParams clusterParams, Dispatcher dispatcher)
+ {
+ super(clusterParams);
this.dispatcher = dispatcher;
}
- /**
- * Pings the backend. Does not propagate to other searchers.
- */
- @Override
- public Pong ping(Ping ping, Execution execution) {
- throw new IllegalStateException("This ping should not have been called.");
- }
-
@Override
protected void transformQuery(Query query) {
QueryRewrite.rewriteSddocname(query);
@@ -83,11 +63,11 @@ public class FastSearcher extends VespaBackEndSearcher {
}
@Override
- public Result doSearch2(Query query, Execution execution) {
+ public Result doSearch2(String schema, Query query) {
if (dispatcher.allGroupsHaveSize1())
forceSinglePassGrouping(query);
try (SearchInvoker invoker = getSearchInvoker(query)) {
- Result result = invoker.search(query, execution);
+ Result result = invoker.search(query);
injectSource(result.hits());
if (query.properties().getBoolean(Ranking.RANKFEATURES, false)) {
@@ -97,7 +77,7 @@ public class FastSearcher extends VespaBackEndSearcher {
// contain the data we need. If we fetch the default
// one we end up fetching docsums twice unless the
// user also requested the default one.
- fill(result, query.getPresentation().getSummary(), execution); // ARGH
+ fill(result, query.getPresentation().getSummary()); // ARGH
}
return result;
} catch (TimeoutException e) {
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/SummaryParameters.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/SummaryParameters.java
deleted file mode 100644
index 8751a730229..00000000000
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/SummaryParameters.java
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.prelude.fastsearch;
-
-
-/**
- * Wrapper for document summary parameters and configuration.
- *
- * @author Steinar Knutsen
- */
-public class SummaryParameters {
-
- public final String defaultClass;
-
- public SummaryParameters(String defaultClass) {
- if (defaultClass != null && defaultClass.isEmpty())
- this.defaultClass = null;
- else
- this.defaultClass = defaultClass;
- }
-
-}
diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java
index 2e635d21f01..761cb22be57 100644
--- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackEndSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java
@@ -12,41 +12,37 @@ import com.yahoo.prelude.querytransform.QueryRewrite;
import com.yahoo.protect.Validator;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
-import com.yahoo.search.cluster.PingableSearcher;
import com.yahoo.search.schema.RankProfile;
import com.yahoo.search.grouping.vespa.GroupingExecutor;
import com.yahoo.search.result.ErrorMessage;
import com.yahoo.search.result.Hit;
-import com.yahoo.search.schema.SchemaInfo;
-import com.yahoo.search.searchchain.Execution;
import com.yahoo.searchlib.aggregation.Grouping;
import java.util.ArrayList;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.logging.Logger;
+import java.util.stream.Collectors;
/**
* Superclass for backend searchers.
*
* @author baldersheim
*/
-public abstract class VespaBackEndSearcher extends PingableSearcher {
+public abstract class VespaBackend {
/** for vespa-internal use only; consider renaming the summary class */
public static final String SORTABLE_ATTRIBUTES_SUMMARY_CLASS = "attributeprefetch";
- private String serverId;
+ private final String serverId;
/** The set of all document databases available in the backend handled by this searcher */
- private final Map<String, DocumentDatabase> documentDbs = new LinkedHashMap<>();
- private DocumentDatabase defaultDocumentDb = null;
+ private final Map<String, DocumentDatabase> documentDbs;
+ private final DocumentDatabase defaultDocumentDb;
/** Default docsum class. null means "unset" and is the default value */
- private String defaultDocsumClass = null;
+ private final String defaultDocsumClass;
/** Returns an iterator which returns all hits below this result **/
private static Iterator<Hit> hitIterator(Result result) {
@@ -54,24 +50,36 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
}
/** The name of this source */
- private String name;
+ private final String name;
- public final String getName() { return name; }
- protected final String getDefaultDocsumClass() { return defaultDocsumClass; }
+ protected VespaBackend(ClusterParams clusterParams) {
+ this.serverId = clusterParams.getServerId();
+ this.name = clusterParams.getSearcherName();
+ this.defaultDocsumClass = clusterParams.getDefaultSummary();
- /** Sets default document summary class. Default is null */
- private void setDefaultDocsumClass(String docsumClass) { defaultDocsumClass = docsumClass; }
+ Validator.ensureNotNull("Name of Vespa backend integration", name);
+
+ List<DocumentDatabase> dbs = new ArrayList<>();
+ if (clusterParams.getDocumentdbInfoConfig() != null) {
+ for (DocumentdbInfoConfig.Documentdb docDb : clusterParams.getDocumentdbInfoConfig().documentdb()) {
+ DocumentDatabase db = new DocumentDatabase(clusterParams.getSchemaInfo().schemas().get(docDb.name()));
+ dbs.add(db);
+ }
+ }
+ this.defaultDocumentDb = dbs.isEmpty() ? null : dbs.get(0);
+ this.documentDbs = dbs.stream().collect(Collectors.toMap(db -> db.schema().name(), db -> db));
+ }
- public final Logger getLogger() { return super.getLogger(); }
+ public final String getName() { return name; }
+ protected final String getDefaultDocsumClass() { return defaultDocsumClass; }
/**
* Searches a search cluster
* This is an endpoint - searchers will never propagate the search to any nested searcher.
*
* @param query the query to search
- * @param execution the query execution context
*/
- protected abstract Result doSearch2(Query query, Execution execution);
+ protected abstract Result doSearch2(String schema, Query query);
protected abstract void doPartialFill(Result result, String summaryClass);
@@ -133,29 +141,9 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
}
}
- public final void init(String serverId, SummaryParameters docSumParams, ClusterParams clusterParams,
- DocumentdbInfoConfig documentdbInfoConfig, SchemaInfo schemaInfo) {
- this.serverId = serverId;
- this.name = clusterParams.searcherName;
-
- Validator.ensureNotNull("Name of Vespa backend integration", getName());
-
- setDefaultDocsumClass(docSumParams.defaultClass);
-
- if (documentdbInfoConfig != null) {
- for (DocumentdbInfoConfig.Documentdb docDb : documentdbInfoConfig.documentdb()) {
- DocumentDatabase db = new DocumentDatabase(schemaInfo.schemas().get(docDb.name()));
- if (documentDbs.isEmpty())
- defaultDocumentDb = db;
- documentDbs.put(docDb.name(), db);
- }
- }
- }
-
protected void transformQuery(Query query) { }
- @Override
- public Result search(Query query, Execution execution) {
+ public Result search(String schema, Query query) {
// query root should not be null here
Item root = query.getModel().getQueryTree().getRoot();
if (root == null || root instanceof NullItem) {
@@ -183,7 +171,7 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
if (root == null || root instanceof NullItem) // root can become null after resolving and transformation?
return new Result(query);
- Result result = doSearch2(query, execution);
+ Result result = doSearch2(schema, query);
if (query.getTrace().getLevel() >= 1)
query.trace(getName() + " dispatch response: " + result, false, 1);
@@ -191,7 +179,7 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
return result;
}
- private List<Result> partitionHits(Result result, String summaryClass) {
+ private static List<Result> partitionHits(Result result, String summaryClass) {
List<Result> parts = new ArrayList<>();
TinyIdentitySet<Query> queryMap = new TinyIdentitySet<>(4);
@@ -217,8 +205,8 @@ public abstract class VespaBackEndSearcher extends PingableSearcher {
return parts;
}
- @Override
- public void fill(Result result, String summaryClass, Execution execution) {
+ //TODO Add schema here too.
+ public void fill(Result result, String summaryClass) {
if (result.isFilled(summaryClass)) return; // TODO: Checked in the superclass - remove
List<Result> parts = partitionHits(result, summaryClass);