From fd740adefc032221f4781cb1b0b90262d5534baf Mon Sep 17 00:00:00 2001 From: Andrew Hind Date: Mon, 12 Oct 2015 20:41:01 +0000 Subject: [PATCH] Fix for ACE-4417 Search by Aspect within a site returns results from all sites git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@114218 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../solr/DbOrIndexSwitchingQueryLanguage.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/source/java/org/alfresco/repo/search/impl/solr/DbOrIndexSwitchingQueryLanguage.java b/source/java/org/alfresco/repo/search/impl/solr/DbOrIndexSwitchingQueryLanguage.java index a27c80c2c8..ae7f0a0d87 100644 --- a/source/java/org/alfresco/repo/search/impl/solr/DbOrIndexSwitchingQueryLanguage.java +++ b/source/java/org/alfresco/repo/search/impl/solr/DbOrIndexSwitchingQueryLanguage.java @@ -144,14 +144,14 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage } case TRANSACTIONAL: if(dbQueryLanguage != null) - { + { if(logger.isDebugEnabled()) { logger.debug("Trying db query for "+dbQueryLanguage.getName()+" for "+searchParameters); } StopWatch stopWatch = new StopWatch("database only"); stopWatch.start(); - ResultSet results = dbQueryLanguage.executeQuery(searchParameters, admLuceneSearcher); + ResultSet results = dbQueryLanguage.executeQuery(flattenDBQuery(searchParameters), admLuceneSearcher); stopWatch.stop(); if (logger.isDebugEnabled()) { @@ -183,7 +183,7 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage logger.debug("Trying db query for "+dbQueryLanguage.getName()+" for "+searchParameters); } stopWatch.start(); - ResultSet results = dbQueryLanguage.executeQuery(searchParameters, admLuceneSearcher); + ResultSet results = dbQueryLanguage.executeQuery(flattenDBQuery(searchParameters), admLuceneSearcher); stopWatch.stop(); if (logger.isDebugEnabled()) { @@ -247,6 +247,27 @@ public class DbOrIndexSwitchingQueryLanguage extends AbstractLuceneQueryLanguage } + private SearchParameters flattenDBQuery(SearchParameters sp) + { + if (sp.getFilterQueries().size() == 0) + { + return sp; + } + else + { + SearchParameters flatten = sp.copy(); + StringBuilder queryBuilder = new StringBuilder(); + + queryBuilder.append("( ").append(sp.getQuery()).append(" )"); + for(String filter : sp.getFilterQueries()) + { + queryBuilder.append("AND ( ").append(filter).append(" )"); + } + flatten.setQuery(queryBuilder.toString()); + // the filter can be left and will be ignored by the DB query + return flatten; + } + } private ResultSet executeHybridQuery(SearchParameters searchParameters, ADMLuceneSearcherImpl admLuceneSearcher)