diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-10-07 21:42:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-07 21:42:55 +0200 |
commit | 0e7684e9dc6164def15c6df6a331c2f1e7a48937 (patch) | |
tree | fecde83f471877b0371eaddd9117ad48978a4585 /container-search/src | |
parent | de3a914eb138ae8b6892e5aa7e0008c10cf667e7 (diff) |
Revert "Revert "Limit document selection per cluster by the document type of the clus…""
Diffstat (limited to 'container-search/src')
6 files changed, 53 insertions, 35 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java index 116db906755..aa04f6ca20b 100644 --- a/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java +++ b/container-search/src/main/java/com/yahoo/prelude/cluster/ClusterSearcher.java @@ -216,11 +216,16 @@ public class ClusterSearcher extends Searcher { CacheParams cacheParams, LegacyEmulationConfig emulConfig, SummaryParameters docSumParams, - DocumentdbInfoConfig documentdbInfoConfig) { + DocumentdbInfoConfig documentdbInfoConfig) + { + if (searchClusterConfig.searchdef().size() != 1) { + throw new IllegalArgumentException("Search clusters in streaming search shall only contain a single searchdefinition : " + searchClusterConfig.searchdef()); + } ClusterParams clusterParams = makeClusterParams(searchclusterIndex, emulConfig, 0); VdsStreamingSearcher searcher = (VdsStreamingSearcher) VespaBackEndSearcher .getSearcher("com.yahoo.vespa.streamingvisitors.VdsStreamingSearcher"); searcher.setSearchClusterConfigId(searchClusterConfig.rankprofiles().configid()); + searcher.setDocumentType(searchClusterConfig.searchdef(0)); searcher.setStorageClusterRouteSpec(searchClusterConfig.storagecluster().routespec()); searcher.init(docSumParams, clusterParams, cacheParams, documentdbInfoConfig); return searcher; diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java index 53c170301fc..a6e4ddaafbc 100644 --- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java +++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcher.java @@ -56,14 +56,18 @@ public class VdsStreamingSearcher extends VespaBackEndSearcher { private Route route; /** The configId used to access the searchcluster. */ private String searchClusterConfigId = null; + private String documentType; /** The route to the storage cluster. */ private String storageClusterRouteSpec = null; - String getSearchClusterConfigId() { return searchClusterConfigId; } - String getStorageClusterRouteSpec() { return storageClusterRouteSpec; } + private String getSearchClusterConfigId() { return searchClusterConfigId; } + private String getStorageClusterRouteSpec() { return storageClusterRouteSpec; } public final void setSearchClusterConfigId(String clusterName) { this.searchClusterConfigId = clusterName; } + public final void setDocumentType(String documentType) { + this.documentType = documentType; + } public final void setStorageClusterRouteSpec(String storageClusterRouteSpec) { this.storageClusterRouteSpec = storageClusterRouteSpec; @@ -71,8 +75,8 @@ public class VdsStreamingSearcher extends VespaBackEndSearcher { private static class VdsVisitorFactory implements VisitorFactory { @Override - public Visitor createVisitor(Query query, String searchCluster, Route route) { - return new VdsVisitor(query, searchCluster, route); + public Visitor createVisitor(Query query, String searchCluster, Route route, String documentType) { + return new VdsVisitor(query, searchCluster, route, documentType); } } @@ -127,8 +131,8 @@ public class VdsStreamingSearcher extends VespaBackEndSearcher { "only one of these query parameters to be set: streaming.userid, streaming.groupname, " + "streaming.selection")); } - query.trace("Routing to search cluster " + getSearchClusterConfigId(), 4); - Visitor visitor = visitorFactory.createVisitor(query, getSearchClusterConfigId(), route); + query.trace("Routing to search cluster " + getSearchClusterConfigId() + " and document type " + documentType, 4); + Visitor visitor = visitorFactory.createVisitor(query, getSearchClusterConfigId(), route, documentType); try { visitor.doSearch(); } catch (ParseException e) { diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsVisitor.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsVisitor.java index 27da8c0cf9b..ded59413411 100644 --- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsVisitor.java +++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VdsVisitor.java @@ -105,16 +105,16 @@ class VdsVisitor extends VisitorDataHandler implements Visitor { } } - public VdsVisitor(Query query, String searchCluster, Route route) { - this.query = query; - visitorSessionFactory = new MessageBusVisitorSessionFactory(); - setVisitorParameters(searchCluster, route); + public VdsVisitor(Query query, String searchCluster, Route route, String documentType) { + this(query, searchCluster, route, documentType, new MessageBusVisitorSessionFactory()); } - public VdsVisitor(Query query, String searchCluster, Route route, VisitorSessionFactory visitorSessionFactory) { + public VdsVisitor(Query query, String searchCluster, Route route, + String documentType, VisitorSessionFactory visitorSessionFactory) + { this.query = query; this.visitorSessionFactory = visitorSessionFactory; - setVisitorParameters(searchCluster, route); + setVisitorParameters(searchCluster, route, documentType); } private static int inferSessionTraceLevel(Query query) { @@ -127,13 +127,14 @@ class VdsVisitor extends VisitorDataHandler implements Visitor { return Math.max(query.getTraceLevel(), implicitLevel); } - private void setVisitorParameters(String searchCluster, Route route) { + private void setVisitorParameters(String searchCluster, Route route, String documentType) { + String limitDocumentType = documentType + " and "; if (query.properties().getString(streamingUserid) != null) { - params.setDocumentSelection("id.user==" + query.properties().getString(streamingUserid)); + params.setDocumentSelection(limitDocumentType + "id.user==" + query.properties().getString(streamingUserid)); } else if (query.properties().getString(streamingGroupname) != null) { - params.setDocumentSelection("id.group==\"" + query.properties().getString(streamingGroupname) + "\""); + params.setDocumentSelection(limitDocumentType + "id.group==\"" + query.properties().getString(streamingGroupname) + "\""); } else if (query.properties().getString(streamingSelection) != null) { - params.setDocumentSelection(query.properties().getString(streamingSelection)); + params.setDocumentSelection(limitDocumentType + query.properties().getString(streamingSelection)); } params.setTimeoutMs(query.getTimeout()); // Per bucket visitor timeout params.setSessionTimeoutMs(query.getTimeout()); diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VisitorFactory.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VisitorFactory.java index 25d4bbc689d..9762d05bf45 100644 --- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VisitorFactory.java +++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/VisitorFactory.java @@ -10,5 +10,5 @@ import com.yahoo.search.Query; * @author <a href="mailto:ulf@yahoo-inc.com">Ulf Carlin</a> */ interface VisitorFactory { - public Visitor createVisitor(Query query, String searchCluster, Route route); + public Visitor createVisitor(Query query, String searchCluster, Route route, String documentType); } diff --git a/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java b/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java index c8c653d67ed..0d58b10fde4 100644 --- a/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java +++ b/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsStreamingSearcherTestCase.java @@ -4,12 +4,14 @@ package com.yahoo.vespa.streamingvisitors; import com.yahoo.config.subscription.ConfigGetter; import com.yahoo.document.select.parser.TokenMgrException; import com.yahoo.messagebus.routing.Route; +import com.yahoo.prelude.fastsearch.CacheKey; +import com.yahoo.prelude.fastsearch.CacheParams; +import com.yahoo.prelude.fastsearch.ClusterParams; import com.yahoo.prelude.fastsearch.DocumentdbInfoConfig; import com.yahoo.document.select.parser.ParseException; import com.yahoo.fs4.QueryPacket; -import com.yahoo.prelude.Ping; -import com.yahoo.prelude.Pong; -import com.yahoo.prelude.fastsearch.*; +import com.yahoo.prelude.fastsearch.SummaryParameters; +import com.yahoo.prelude.fastsearch.TimeoutException; import com.yahoo.search.Query; import com.yahoo.search.Result; import com.yahoo.search.result.Hit; @@ -25,7 +27,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; /** * @author <a href="mailto:ulf@yahoo-inc.com">Ulf Carlin</a> @@ -35,18 +41,20 @@ public class VdsStreamingSearcherTestCase { public static final String GROUPDOC_ID_PREFIX = "groupdoc:namespace:group1:userspecific"; private static class MockVisitor implements Visitor { - private Query query; - String searchCluster; - Route route; + private final Query query; + final String searchCluster; + final Route route; + final String documentType; int totalHitCount; private final List<SearchResult.Hit> hits = new ArrayList<>(); private final Map<String, DocumentSummary.Summary> summaryMap = new HashMap<>(); private final List<Grouping> groupings = new ArrayList<>(); - MockVisitor(Query query, String searchCluster, Route route) { + MockVisitor(Query query, String searchCluster, Route route, String documentType) { this.query = query; this.searchCluster = searchCluster; this.route = route; + this.documentType = documentType; } @Override @@ -124,8 +132,8 @@ public class VdsStreamingSearcherTestCase { private static class MockVisitorFactory implements VisitorFactory { @Override - public Visitor createVisitor(Query query, String searchCluster, Route route) { - return new MockVisitor(query, searchCluster, route); + public Visitor createVisitor(Query query, String searchCluster, Route route, String documentType) { + return new MockVisitor(query, searchCluster, route, documentType); } } diff --git a/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsVisitorTestCase.java b/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsVisitorTestCase.java index 6964fd3b5e8..c84088a19bb 100644 --- a/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsVisitorTestCase.java +++ b/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/VdsVisitorTestCase.java @@ -224,15 +224,15 @@ public class VdsVisitorTestCase { return query; } - private void verifyVisitorParameters(VisitorParameters params, QueryArguments qa, String searchCluster, Route route) { + private void verifyVisitorParameters(VisitorParameters params, QueryArguments qa, String searchCluster, String docType, Route route) { //System.out.println("params="+params); // Verify parameters based on properties if (qa.userId != null) { - assertEquals("id.user=="+qa.userId, params.getDocumentSelection()); + assertEquals(docType + " and id.user=="+qa.userId, params.getDocumentSelection()); } else if (qa.groupName != null) { - assertEquals("id.group==\""+qa.groupName+"\"", params.getDocumentSelection()); + assertEquals(docType + " and id.group==\""+qa.groupName+"\"", params.getDocumentSelection()); } else if (qa.selection != null) { - assertEquals(qa.selection, params.getDocumentSelection()); + assertEquals(docType + " and " +qa.selection, params.getDocumentSelection()); } else { assertEquals("", params.getDocumentSelection()); } @@ -407,15 +407,15 @@ public class VdsVisitorTestCase { } private void verifyVisitorOk(MockVisitorSessionFactory factory, QueryArguments qa, Route route, String searchCluster) throws Exception { - VdsVisitor visitor = new VdsVisitor(buildQuery(qa), searchCluster, route, factory); + VdsVisitor visitor = new VdsVisitor(buildQuery(qa), searchCluster, route, "mytype", factory); visitor.doSearch(); - verifyVisitorParameters(factory.getParams(), qa, searchCluster, route); + verifyVisitorParameters(factory.getParams(), qa, searchCluster, "mytype", route); supplyResults(visitor); verifyResults(qa, visitor); } private void verifyVisitorFails(MockVisitorSessionFactory factory, QueryArguments qa, Route route, String searchCluster) throws Exception { - VdsVisitor visitor = new VdsVisitor(buildQuery(qa), searchCluster, route, factory); + VdsVisitor visitor = new VdsVisitor(buildQuery(qa), searchCluster, route, "mytype", factory); try { visitor.doSearch(); assertTrue("Visitor did not fail", false); |