mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -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)
|
||||||
|
@@ -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)
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user