Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud)

99486: Merged DEREK/BM-0004 (5.1.0.BM4) to HEAD-BUG-FIX (5.1/Cloud)
      98804: Part 2:         ACE-1021    SOLR 4 - Sharding/Replication/Cluster/Cloud
      - SOLR 4 - support multiple stores requested via search parameters
      - explicit federation over a specified set of stores and related SOLR 4 indexes


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@99545 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Alan Davis
2015-03-17 09:39:28 +00:00
parent eba15572e6
commit fc1cb0841f
4 changed files with 32 additions and 4 deletions

View File

@@ -68,9 +68,9 @@ public class SearcherComponent extends AbstractSearcherComponent
public ResultSet query(SearchParameters searchParameters) 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); StoreRef storeRef = searchParameters.getStores().get(0);
SearchService searcher = indexerAndSearcherFactory.getSearcher(storeRef, !searchParameters.excludeDataInTheCurrentTransaction()); SearchService searcher = indexerAndSearcherFactory.getSearcher(storeRef, !searchParameters.excludeDataInTheCurrentTransaction());

View File

@@ -156,6 +156,11 @@ public class DBQueryEngine implements QueryEngine
Map<Set<String>, ResultSet> answer = new HashMap<Set<String>, ResultSet>(); Map<Set<String>, ResultSet> answer = new HashMap<Set<String>, ResultSet>();
DBQuery dbQuery = (DBQuery)query; DBQuery dbQuery = (DBQuery)query;
if(options.getStores().size() > 1)
{
throw new QueryModelException("Multi-store queries are not supported");
}
// MT // MT
StoreRef storeRef = options.getStores().get(0); StoreRef storeRef = options.getStores().get(0);
storeRef = storeRef != null ? tenantService.getName(storeRef) : null; storeRef = storeRef != null ? tenantService.getName(storeRef) : null;

View File

@@ -343,6 +343,29 @@ public class SolrQueryHTTPClient implements BeanFactoryAware
url.append("?wt=").append(encoder.encode("json", "UTF-8")); url.append("?wt=").append(encoder.encode("json", "UTF-8"));
url.append("&fl=").append(encoder.encode("DBID,score", "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 // Emulate old limiting behaviour and metadata
final LimitBy limitBy; final LimitBy limitBy;
int maxResults = -1; int maxResults = -1;

View File

@@ -317,9 +317,9 @@ public class SolrSearchService implements SearchService
@Override @Override
public ResultSet query(SearchParameters searchParameters) 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; String parameterisedQueryString;