From 469fe100cf7c86b1cb69211b1f6e3738c5a1bba3 Mon Sep 17 00:00:00 2001 From: Andrei Rebegea Date: Thu, 15 Jun 2017 10:59:04 +0000 Subject: [PATCH] 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 --- .../rest/api/search/impl/ResultMapper.java | 32 ++++++++++++++++--- .../rest/api/search/ResultMapperTests.java | 13 +++++++- .../search/SearchQuerySerializerTests.java | 2 +- .../rest/api/search/SerializerTestHelper.java | 2 +- 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java b/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java index bacf056ae0..b1b97fd8bc 100644 --- a/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/ResultMapper.java @@ -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>> facetFields = solrResultSet.getFieldFacets(); - ffcs = getFacetBuckets(facetFields, true); + ffcs = getFacetBuckets(facetFields, true, null); Map>> facetInterval = solrResultSet.getFacetIntervals(); - List intervals = getFacetBuckets(facetInterval, false); + List intervals = getFacetBuckets(facetInterval, false, searchQuery); //Spelling SpellCheckResult spell = solrResultSet.getSpellCheckResult(); @@ -306,7 +309,7 @@ public class ResultMapper return isNullContext(context)?null:context; } - protected List getFacetBuckets(Map>> facetFields, boolean withDisplay) + protected List getFacetBuckets(Map>> facetFields, boolean withDisplay, SearchQuery searchQuery) { if (facetFields != null && !facetFields.isEmpty()) { @@ -319,7 +322,8 @@ public class ResultMapper for (Pair 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 found = searchQuery.getFacetIntervals().getIntervals().stream().filter(interval -> facetKey.equals(interval.getField())).findFirst(); + if (found.isPresent()) + { + if (found.get().getSets() != null) + { + Optional 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 diff --git a/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java b/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java index 411c1377ca..d4e6bb8255 100644 --- a/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/ResultMapperTests.java @@ -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 long name\"],\"title\": [\"title1 is very long\"], \"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 diff --git a/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java b/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java index 1f0524d7c7..8757a10f5c 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchQuerySerializerTests.java @@ -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()); diff --git a/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java b/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java index f87d9924a9..5f2ca6d1c9 100644 --- a/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java +++ b/source/test-java/org/alfresco/rest/api/search/SerializerTestHelper.java @@ -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\"},"