diff --git a/source/java/org/alfresco/repo/search/SearcherComponent.java b/source/java/org/alfresco/repo/search/SearcherComponent.java index eb25c05bd9..db6a62469c 100644 --- a/source/java/org/alfresco/repo/search/SearcherComponent.java +++ b/source/java/org/alfresco/repo/search/SearcherComponent.java @@ -68,9 +68,9 @@ public class SearcherComponent extends AbstractSearcherComponent public ResultSet query(SearchParameters searchParameters) { - if(searchParameters.getStores().size() != 1) + if(searchParameters.getStores().size() == 0) { - throw new IllegalStateException("Only one store can be searched at present"); + throw new IllegalStateException("At least one store must be defined to search"); } StoreRef storeRef = searchParameters.getStores().get(0); SearchService searcher = indexerAndSearcherFactory.getSearcher(storeRef, !searchParameters.excludeDataInTheCurrentTransaction()); diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java index 8f4bf9d84a..187a49b911 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/db/DBQueryEngine.java @@ -156,6 +156,11 @@ public class DBQueryEngine implements QueryEngine Map, ResultSet> answer = new HashMap, ResultSet>(); DBQuery dbQuery = (DBQuery)query; + if(options.getStores().size() > 1) + { + throw new QueryModelException("Multi-store queries are not supported"); + } + // MT StoreRef storeRef = options.getStores().get(0); storeRef = storeRef != null ? tenantService.getName(storeRef) : null; diff --git a/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java b/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java index 65e36da78e..330a92e804 100644 --- a/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java +++ b/source/java/org/alfresco/repo/search/impl/solr/SolrQueryHTTPClient.java @@ -343,6 +343,29 @@ public class SolrQueryHTTPClient implements BeanFactoryAware url.append("?wt=").append(encoder.encode("json", "UTF-8")); url.append("&fl=").append(encoder.encode("DBID,score", "UTF-8")); + if(searchParameters.getStores().size() > 1) + { + boolean requiresSeparator = false; + url.append("&shards="); + for(StoreRef storeRef : searchParameters.getStores()) + { + if(requiresSeparator) + { + url.append(','); + } + else + { + requiresSeparator = true; + } + SolrStoreMapping shard = extractMapping(storeRef); + HttpClient client = httpClients.get(storeRef); + url.append(client.getHostConfiguration().getHost()); + url.append(':'); + url.append(client.getHostConfiguration().getPort()); + url.append(shard.getBaseUrl()); + } + } + // Emulate old limiting behaviour and metadata final LimitBy limitBy; int maxResults = -1; diff --git a/source/java/org/alfresco/repo/search/impl/solr/SolrSearchService.java b/source/java/org/alfresco/repo/search/impl/solr/SolrSearchService.java index e15c133f3e..c9dbf73756 100644 --- a/source/java/org/alfresco/repo/search/impl/solr/SolrSearchService.java +++ b/source/java/org/alfresco/repo/search/impl/solr/SolrSearchService.java @@ -317,9 +317,9 @@ public class SolrSearchService implements SearchService @Override public ResultSet query(SearchParameters searchParameters) { - if (searchParameters.getStores().size() != 1) + if(searchParameters.getStores().size() == 0) { - throw new IllegalStateException("Only one store can be searched at present"); + throw new IllegalStateException("At least one store must be defined to search"); } String parameterisedQueryString;