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

70682: Merged WAT1 (4.3/Cloud) to HEAD-BUG-FIX (4.3/Cloud)
      69736: ACE-1615: Fixed the search result to return empty arrays for field facets, when no facet queries are available.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@70914 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Draper
2014-05-19 12:49:53 +00:00
parent 98e88f9d65
commit 13c1057ba7
2 changed files with 42 additions and 14 deletions

View File

@@ -938,6 +938,14 @@ public class Search extends BaseScopableProcessorExtension implements Initializi
facetMeta.put(ff.getField(), facets); facetMeta.put(ff.getField(), facets);
} }
// Start of bucketing
// ACE-1615: Populate the facetMeta map with empty lists. If there is a
// facet query with >0 hits, the relevant list will be populated
// with the results, otherwise the list remains empty.
for(String bucketedField : solrFacetHelper.getBucketedFieldFacets())
{
facetMeta.put(bucketedField, new ArrayList<ScriptFacetResult>());
}
Set<Entry<String, Integer>> facetQueries = results.getFacetQueries().entrySet(); Set<Entry<String, Integer>> facetQueries = results.getFacetQueries().entrySet();
for(Entry<String, Integer> entry : facetQueries) for(Entry<String, Integer> entry : facetQueries)
{ {
@@ -954,18 +962,17 @@ public class Search extends BaseScopableProcessorExtension implements Initializi
List<ScriptFacetResult> fqs = facetMeta.get(qName); List<ScriptFacetResult> fqs = facetMeta.get(qName);
if (fqs == null) if (fqs == null)
{ {
fqs = new ArrayList<>(); // Shouldn't be here
throw new AlfrescoRuntimeException("Field facet [" + qName + "] has"
+ " not been registerd with SolrFacetHelper.BUCKETED_FIELD_FACETS.");
} }
FacetLabelDisplayHandler handler = solrFacetHelper.getDisplayHandler(qName); FacetLabelDisplayHandler handler = solrFacetHelper.getDisplayHandler(qName);
FacetLabel facetLabel = (handler == null) ? new FacetLabel(qName, key.substring(qName.length(), FacetLabel facetLabel = (handler == null) ? new FacetLabel(qName, key.substring(qName.length(),
key.length()), -1) : handler.getDisplayLabel(key); key.length()), -1) : handler.getDisplayLabel(key);
fqs.add(new ScriptFacetResult(facetLabel.getValue(), facetLabel.getLabel(), facetLabel.getLabelIndex(), entry.getValue())); fqs.add(new ScriptFacetResult(facetLabel.getValue(), facetLabel.getLabel(), facetLabel.getLabelIndex(), entry.getValue()));
// store facet query results per field
facetMeta.put(qName, fqs);
}
} }
}// End of bucketing
meta.put("facets", facetMeta); meta.put("facets", facetMeta);
} }
catch (Throwable err) catch (Throwable err)

View File

@@ -19,7 +19,9 @@
package org.alfresco.repo.search.impl.solr.facet; package org.alfresco.repo.search.impl.solr.facet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@@ -57,9 +59,9 @@ public class SolrFacetHelper
private static Log logger = LogFactory.getLog(SolrFacetHelper.class); private static Log logger = LogFactory.getLog(SolrFacetHelper.class);
private static final String FQ_NS_PREFIX = "@{http://www.alfresco.org/model/content/1.0}"; private static final String FQ_NS_PREFIX = "@{http://www.alfresco.org/model/content/1.0}";
private static final String CREATED_FACET_QUERY_PREFIX = FQ_NS_PREFIX + "created:"; private static final String CREATED_FIELD_FACET_QUERY = FQ_NS_PREFIX + "created";
private static final String MODIFIED_FACET_QUERY_PREFIX = FQ_NS_PREFIX + "modified:"; private static final String MODIFIED_FIELD_FACET_QUERY = FQ_NS_PREFIX + "modified";
private static final String CONTENT_SIZE_FACET_QUERY_PREFIX = FQ_NS_PREFIX + "content.size:"; private static final String CONTENT_SIZE_FIELD_FACET_QUERY = FQ_NS_PREFIX + "content.size";
// Content size buckets // Content size buckets
private static final int KB = 1024; private static final int KB = 1024;
@@ -84,6 +86,15 @@ public class SolrFacetHelper
CONTENT_SIZE_BUCKETS.add(HUGE + " TO MAX"); CONTENT_SIZE_BUCKETS.add(HUGE + " TO MAX");
} }
/** Field facet buckets */
private static final Set<String> BUCKETED_FIELD_FACETS = new HashSet<>(3);
static
{
BUCKETED_FIELD_FACETS.add(CREATED_FIELD_FACET_QUERY);
BUCKETED_FIELD_FACETS.add(MODIFIED_FIELD_FACET_QUERY);
BUCKETED_FIELD_FACETS.add(CONTENT_SIZE_FIELD_FACET_QUERY);
}
/** Facet value and facet query display label handlers */ /** Facet value and facet query display label handlers */
private Map<String, FacetLabelDisplayHandler> displayHandlers; private Map<String, FacetLabelDisplayHandler> displayHandlers;
@@ -108,9 +119,9 @@ public class SolrFacetHelper
this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}creator.__", userNameDisplayHandler); this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}creator.__", userNameDisplayHandler);
this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}modifier.__", userNameDisplayHandler); this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}modifier.__", userNameDisplayHandler);
this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}content.mimetype", mimetypeDisplayHandler); this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}content.mimetype", mimetypeDisplayHandler);
this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}created", dateBucketsDisplayHandler); this.displayHandlers.put(CREATED_FIELD_FACET_QUERY, dateBucketsDisplayHandler);
this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}modified", dateBucketsDisplayHandler); this.displayHandlers.put(MODIFIED_FIELD_FACET_QUERY, dateBucketsDisplayHandler);
this.displayHandlers.put("@{http://www.alfresco.org/model/content/1.0}content.size", contentSizeBucketsDisplayHandler); this.displayHandlers.put(CONTENT_SIZE_FIELD_FACET_QUERY, contentSizeBucketsDisplayHandler);
} }
/** /**
@@ -140,14 +151,14 @@ public class SolrFacetHelper
// Created and Modified dates facet queries // Created and Modified dates facet queries
for (String bucket : dateBuckets) for (String bucket : dateBuckets)
{ {
facetQueries.add(CREATED_FACET_QUERY_PREFIX + '[' + bucket + ']'); facetQueries.add(CREATED_FIELD_FACET_QUERY + ":[" + bucket + ']');
facetQueries.add(MODIFIED_FACET_QUERY_PREFIX + '[' + bucket + ']'); facetQueries.add(MODIFIED_FIELD_FACET_QUERY + ":[" + bucket + ']');
} }
// Content size facet query // Content size facet query
for (String bucket : CONTENT_SIZE_BUCKETS) for (String bucket : CONTENT_SIZE_BUCKETS)
{ {
facetQueries.add(CONTENT_SIZE_FACET_QUERY_PREFIX + '[' + bucket + ']'); facetQueries.add(CONTENT_SIZE_FIELD_FACET_QUERY + ":[" + bucket + ']');
} }
return facetQueries; return facetQueries;
@@ -165,6 +176,16 @@ public class SolrFacetHelper
return displayHandlers.get(qName); return displayHandlers.get(qName);
} }
/**
* Gets predefined set of field facets which are used to construct bucketing
*
* @return an unmodifiable view of the set of predefined field facets
*/
public Set<String> getBucketedFieldFacets()
{
return Collections.unmodifiableSet(BUCKETED_FIELD_FACETS);
}
/** /**
* Creates Date buckets. The dates are in ISO8601 format (yyyy-MM-dd) * Creates Date buckets. The dates are in ISO8601 format (yyyy-MM-dd)
* *