Merged 5.2.N (5.2.2) to HEAD (5.2)

136084 gjames: Merged searchbcr (5.2.1) to 5.2.N (5.2.1)
      135514 gjames: SEARCH-339: Adding filterQuery to facet interval/facet fields


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@137456 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrei Rebegea
2017-06-15 10:59:04 +00:00
parent 3b7bcc199a
commit 469fe100cf
4 changed files with 42 additions and 7 deletions

View File

@@ -52,6 +52,9 @@ import org.alfresco.rest.framework.resource.parameters.Params;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.search.Interval;
import org.alfresco.service.cmr.search.IntervalParameters;
import org.alfresco.service.cmr.search.IntervalSet;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SpellCheckResult;
@@ -289,10 +292,10 @@ public class ResultMapper
//Field Facets
Map<String, List<Pair<String, Integer>>> facetFields = solrResultSet.getFieldFacets();
ffcs = getFacetBuckets(facetFields, true);
ffcs = getFacetBuckets(facetFields, true, null);
Map<String, List<Pair<String, Integer>>> facetInterval = solrResultSet.getFacetIntervals();
List<FacetFieldContext> intervals = getFacetBuckets(facetInterval, false);
List<FacetFieldContext> intervals = getFacetBuckets(facetInterval, false, searchQuery);
//Spelling
SpellCheckResult spell = solrResultSet.getSpellCheckResult();
@@ -306,7 +309,7 @@ public class ResultMapper
return isNullContext(context)?null:context;
}
protected List<FacetFieldContext> getFacetBuckets(Map<String, List<Pair<String, Integer>>> facetFields, boolean withDisplay)
protected List<FacetFieldContext> getFacetBuckets(Map<String, List<Pair<String, Integer>>> facetFields, boolean withDisplay, SearchQuery searchQuery)
{
if (facetFields != null && !facetFields.isEmpty())
{
@@ -319,7 +322,8 @@ public class ResultMapper
for (Pair<String, Integer> buck:facet.getValue())
{
Object display = withDisplay?propertyLookup.lookup(facet.getKey(), buck.getFirst()):null;
buckets.add(new Bucket(buck.getFirst(), facet.getKey()+":NOT_DONE", buck.getSecond(), display));
String filterQuery = lookupQuery(facet.getKey(), buck.getFirst(), searchQuery);
buckets.add(new Bucket(buck.getFirst(), facet.getKey()+":"+filterQuery, buck.getSecond(), display));
}
ffcs.add(new FacetFieldContext(facet.getKey(), buckets));
}
@@ -330,6 +334,26 @@ public class ResultMapper
return null;
}
protected String lookupQuery(String facetKey, String key, SearchQuery searchQuery)
{
if (searchQuery != null
&& searchQuery.getFacetIntervals() != null
&& searchQuery.getFacetIntervals().getIntervals() != null
&& !searchQuery.getFacetIntervals().getIntervals().isEmpty())
{
Optional<Interval> found = searchQuery.getFacetIntervals().getIntervals().stream().filter(interval -> facetKey.equals(interval.getField())).findFirst();
if (found.isPresent())
{
if (found.get().getSets() != null)
{
Optional<IntervalSet> foundSet = found.get().getSets().stream().filter(aSet -> key.equals(aSet.getLabel())).findFirst();
if (foundSet.isPresent()) return foundSet.get().toRange();
}
}
}
return key;
}
/**
* Is the context null?
* @param context

View File

@@ -99,7 +99,11 @@ public class ResultMapperTests
static ResultMapper mapper;
public static final String JSON_REPONSE = "{\"responseHeader\":{\"status\":0,\"QTime\":9},\"_original_parameters_\":\"org.apache.solr.common.params.DefaultSolrParams:{params(df=TEXT&alternativeDic=DEFAULT_DICTIONARY&fl=DBID,score&start=0&fq={!afts}AUTHORITY_FILTER_FROM_JSON&fq={!afts}TENANT_FILTER_FROM_JSON&rows=1000&locale=en_US&wt=json),defaults(carrot.url=id&spellcheck.collateExtendedResults=true&carrot.produceSummary=true&spellcheck.maxCollations=3&spellcheck.maxCollationTries=5&spellcheck.alternativeTermCount=2&spellcheck.extendedResults=false&defType=afts&spellcheck.maxResultsForSuggest=5&spellcheck=false&carrot.outputSubClusters=false&spellcheck.count=5&carrot.title=mltext@m___t@{http://www.alfresco.org/model/content/1.0}title&carrot.snippet=content@s___t@{http://www.alfresco.org/model/content/1.0}content&spellcheck.collate=true)}\",\"_field_mappings_\":{},\"_date_mappings_\":{},\"_range_mappings_\":{},\"_pivot_mappings_\":{},\"_interval_mappings_\":{},\"_stats_field_mappings_\":{},\"_stats_facet_mappings_\":{},\"_facet_function_mappings_\":{},\"response\":{\"numFound\":6,\"start\":0,\"maxScore\":0.7849362,\"docs\":[{\"DBID\":565,\"score\":0.7849362},{\"DBID\":566,\"score\":0.7849362},{\"DBID\":521,\"score\":0.3540957},{\"DBID\":514,\"score\":0.33025497},{\"DBID\":420,\"score\":0.32440513},{\"DBID\":415,\"score\":0.2780319}]},"
+ "\"facet_counts\":{\"facet_queries\":{\"small\":0,\"large\":0,\"xtra small\":3,\"xtra large\":0,\"medium\":8,\"XX large\":0},"
+ "\"facet_fields\":{\"content.size\":[\"Big\",8,\"Brown\",3,\"Fox\",5,\"Jumped\",2,\"somewhere\",3]},\"facet_dates\":{},\"facet_ranges\":{},\"facet_intervals\":{}\n" + " },"
+ "\"facet_fields\":{\"content.size\":[\"Big\",8,\"Brown\",3,\"Fox\",5,\"Jumped\",2,\"somewhere\",3]},"
+"\"facet_dates\":{},"
+"\"facet_ranges\":{},"
+"\"facet_intervals\":{\"creator\":{\"last\":4,\"first\":0},\"datetime@sd@{http://www.alfresco.org/model/content/1.0}created\":{\"earlier\":5,\"lastYear\":0,\"currentYear\":0}}"
+ "},"
+ "\"spellcheck\":{\"searchInsteadFor\":\"alfresco\"},"
+ "\"highlighting\": {"
+ " \"_DEFAULT_!800001579e3d1964!800001579e3d1969\": {\"name\": [\"some very <al>long<fresco> name\"],\"title\": [\"title1 is very <al>long<fresco>\"], \"DBID\": \"521\"},"
@@ -267,6 +271,13 @@ public class ResultMapperTests
assertEquals(1, searchContext.getFacetsFields().size());
assertEquals("content.size",searchContext.getFacetsFields().get(0).getLabel());
assertEquals(5,searchContext.getFacetsFields().get(0).getBuckets().size());
//Facet intervals
assertEquals(2, searchContext.getFacetIntervals().size());
assertEquals("creator",searchContext.getFacetIntervals().get(0).getLabel());
assertEquals("last",searchContext.getFacetIntervals().get(0).getBuckets().get(0).getLabel());
assertEquals("creator:(a,b]",searchContext.getFacetIntervals().get(0).getBuckets().get(0).getFilterQuery());
assertEquals(4,searchContext.getFacetIntervals().get(0).getBuckets().get(0).getCount());
}
@Test

View File

@@ -159,7 +159,7 @@ public class SearchQuerySerializerTests
assertEquals("Creator", interval.getLabel());
assertEquals("creator", interval.getField());
is = interval.getSets().get(0);
assertEquals("bob", is.getLabel());
assertEquals("last", is.getLabel());
assertEquals("a", is.getStart());
assertEquals("b", is.getEnd());
assertEquals(false, is.isStartInclusive());

View File

@@ -64,7 +64,7 @@ public class SerializerTestHelper implements RequestReader
+ "\"facetQueries\": [{\"query\": \"cm:created:bob\",\"label\": \"small\"}],"
+ "\"facetIntervals\": {\"sets\": [{ \"label\": \"king\", \"start\": \"1\", \"end\": \"2\",\"startInclusive\": true,\"endInclusive\": false}]"
+ ",\"intervals\": [{\"field\": \"creator\",\"label\": \"Creator\","
+ "\"sets\": [{\"label\": \"bob\",\"start\": \"a\",\"end\": \"b\",\"startInclusive\": false}]"
+ "\"sets\": [{\"label\": \"last\",\"start\": \"a\",\"end\": \"b\",\"startInclusive\": false}]"
+ "}]},"
+ "\"spellcheck\": {\"query\": \"alfrezco\"},"
+ "\"limits\": {\"permissionEvaluationCount\": \"2000\",\"permissionEvaluationTime\": \"5000\"},"