mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged searchrep (5.2.1) to 5.2.N (5.2.1)
136888 msuzuki: Search-340, align range response with interval response git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@137067 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -30,6 +30,20 @@ import static org.alfresco.rest.api.search.impl.StoreMapper.DELETED;
|
|||||||
import static org.alfresco.rest.api.search.impl.StoreMapper.HISTORY;
|
import static org.alfresco.rest.api.search.impl.StoreMapper.HISTORY;
|
||||||
import static org.alfresco.rest.api.search.impl.StoreMapper.LIVE_NODES;
|
import static org.alfresco.rest.api.search.impl.StoreMapper.LIVE_NODES;
|
||||||
import static org.alfresco.rest.api.search.impl.StoreMapper.VERSIONS;
|
import static org.alfresco.rest.api.search.impl.StoreMapper.VERSIONS;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.alfresco.repo.search.impl.lucene.SolrJSONResultSet;
|
import org.alfresco.repo.search.impl.lucene.SolrJSONResultSet;
|
||||||
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericBucket;
|
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericBucket;
|
||||||
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericFacetResponse;
|
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericFacetResponse;
|
||||||
@@ -73,19 +87,6 @@ import org.alfresco.util.Pair;
|
|||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maps from a ResultSet to a json public api representation.
|
* Maps from a ResultSet to a json public api representation.
|
||||||
*
|
*
|
||||||
@@ -331,7 +332,7 @@ public class ResultMapper
|
|||||||
facets.addAll(getGenericFacetsForIntervals(facetInterval, searchQuery));
|
facets.addAll(getGenericFacetsForIntervals(facetInterval, searchQuery));
|
||||||
|
|
||||||
Map<String,List<Map<String,String>>> facetRanges = solrResultSet.getFacetRanges();
|
Map<String,List<Map<String,String>>> facetRanges = solrResultSet.getFacetRanges();
|
||||||
facets.addAll(getGenericFacetsForRanges(facetRanges, searchQuery));
|
facets.addAll(RangeResultMapper.getGenericFacetsForRanges(facetRanges, searchQuery));
|
||||||
|
|
||||||
List<GenericFacetResponse> stats = getFieldStats(searchRequestContext, solrResultSet.getStats());
|
List<GenericFacetResponse> stats = getFieldStats(searchRequestContext, solrResultSet.getStats());
|
||||||
List<GenericFacetResponse> pimped = getPivots(searchRequestContext, solrResultSet.getPivotFacets(), stats);
|
List<GenericFacetResponse> pimped = getPivots(searchRequestContext, solrResultSet.getPivotFacets(), stats);
|
||||||
@@ -498,46 +499,6 @@ public class ResultMapper
|
|||||||
}
|
}
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Transforms the facet range response into generic facet response.
|
|
||||||
* @param facetFields
|
|
||||||
* @param searchQuery
|
|
||||||
* @return GenericFacetResponse
|
|
||||||
*/
|
|
||||||
protected static List<GenericFacetResponse> getGenericFacetsForRanges( Map<String,List<Map<String,String>>> facetFields, SearchQuery searchQuery)
|
|
||||||
{
|
|
||||||
List<GenericFacetResponse> ffcs = new ArrayList<>(facetFields.size());
|
|
||||||
if (facetFields != null && !facetFields.isEmpty() && searchQuery.getQuery() != null)
|
|
||||||
{
|
|
||||||
for (Entry<String, List<Map<String, String>>> facet : facetFields.entrySet())
|
|
||||||
{
|
|
||||||
List<GenericBucket> buckets = new ArrayList<>();
|
|
||||||
facet.getValue().forEach(action -> buckets.add(buildGenericBucketFromRange(facet.getKey(), (Map<String, String>) action)));
|
|
||||||
ffcs.add(new GenericFacetResponse(FACET_TYPE.range, facet.getKey(), buckets));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ffcs;
|
|
||||||
}
|
|
||||||
private static GenericBucket buildGenericBucketFromRange(String facetField, Map<String,String> facet)
|
|
||||||
{
|
|
||||||
String from = facet.get(GenericFacetResponse.START);
|
|
||||||
String to = facet.get(GenericFacetResponse.END);
|
|
||||||
String label = facet.get(GenericFacetResponse.LABEL);
|
|
||||||
facet.remove(GenericFacetResponse.LABEL);
|
|
||||||
String filterQ = String.format("%s:(%s TO %s)",
|
|
||||||
facetField,
|
|
||||||
from,
|
|
||||||
to);
|
|
||||||
return new GenericBucket(label,
|
|
||||||
filterQ,
|
|
||||||
null,
|
|
||||||
new HashSet<Metric>(Arrays.asList(new SimpleMetric(METRIC_TYPE.count,facet.get(GenericFacetResponse.COUNT)))),
|
|
||||||
null,
|
|
||||||
facet);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns generic faceting responses for Intervals
|
* Returns generic faceting responses for Intervals
|
||||||
* @param facetFields
|
* @param facetFields
|
||||||
|
@@ -478,37 +478,43 @@ public class ResultMapperTests
|
|||||||
assertEquals(2, rangeFacets.size());
|
assertEquals(2, rangeFacets.size());
|
||||||
assertEquals(4, rangeFacets.get(0).getBuckets().size());
|
assertEquals(4, rangeFacets.get(0).getBuckets().size());
|
||||||
assertEquals("created",rangeFacets.get(0).getLabel());
|
assertEquals("created",rangeFacets.get(0).getLabel());
|
||||||
assertEquals("2015-09-29T10:45:15.729Z - 2016-01-07T10:45:15.729Z",rangeFacets.get(0).getBuckets().get(0).getLabel());
|
assertEquals("[2015-09-29T10:45:15.729Z - 2016-01-07T10:45:15.729Z)",rangeFacets.get(0).getBuckets().get(0).getLabel());
|
||||||
Object[] metrics1 = rangeFacets.get(0).getBuckets().get(0).getMetrics().toArray();
|
Object[] metrics1 = rangeFacets.get(0).getBuckets().get(0).getMetrics().toArray();
|
||||||
assertEquals("0",((SimpleMetric) metrics1[0]).getValue().get("count"));
|
assertEquals("0",((SimpleMetric) metrics1[0]).getValue().get("count"));
|
||||||
assertEquals("created:(2015-09-29T10:45:15.729Z TO 2016-01-07T10:45:15.729Z)", rangeFacets.get(0).getBuckets().get(0).getFilterQuery());
|
assertEquals("created:[2015-09-29T10:45:15.729Z TO 2016-01-07T10:45:15.729Z>", rangeFacets.get(0).getBuckets().get(0).getFilterQuery());
|
||||||
|
assertEquals(null,rangeFacets.get(0).getBuckets().get(0).getBucketInfo().get("count"));
|
||||||
|
assertEquals("false",rangeFacets.get(0).getBuckets().get(0).getBucketInfo().get("endInclusive"));
|
||||||
|
assertEquals("true",rangeFacets.get(0).getBuckets().get(0).getBucketInfo().get("startInclusive"));
|
||||||
|
|
||||||
assertEquals(3, rangeFacets.get(1).getBuckets().size());
|
assertEquals(3, rangeFacets.get(1).getBuckets().size());
|
||||||
assertEquals("content.size",rangeFacets.get(1).getLabel());
|
assertEquals("content.size",rangeFacets.get(1).getLabel());
|
||||||
assertEquals("0 - 100",rangeFacets.get(1).getBuckets().get(0).getLabel());
|
assertEquals("[0 - 100)",rangeFacets.get(1).getBuckets().get(0).getLabel());
|
||||||
Object[] metrics = rangeFacets.get(1).getBuckets().get(0).getMetrics().toArray();
|
Object[] metrics = rangeFacets.get(1).getBuckets().get(0).getMetrics().toArray();
|
||||||
assertEquals("4",((SimpleMetric) metrics[0]).getValue().get("count"));
|
assertEquals("4",((SimpleMetric) metrics[0]).getValue().get("count"));
|
||||||
assertEquals("content.size:(0 TO 100)", rangeFacets.get(1).getBuckets().get(0).getFilterQuery());
|
assertEquals("content.size:[0 TO 100>", rangeFacets.get(1).getBuckets().get(0).getFilterQuery());
|
||||||
|
assertEquals(null,rangeFacets.get(1).getBuckets().get(0).getBucketInfo().get("count"));
|
||||||
Map<String, String> facetInfo = rangeFacets.get(1).getBuckets().get(0).getBucketInfo();
|
Map<String, String> facetInfo = rangeFacets.get(1).getBuckets().get(0).getBucketInfo();
|
||||||
assertEquals("0",facetInfo.get("start"));
|
assertEquals("0",facetInfo.get("start"));
|
||||||
assertEquals("100",facetInfo.get("end"));
|
assertEquals("100",facetInfo.get("end"));
|
||||||
|
|
||||||
assertEquals("100 - 200",rangeFacets.get(1).getBuckets().get(1).getLabel());
|
assertEquals("[100 - 200)",rangeFacets.get(1).getBuckets().get(1).getLabel());
|
||||||
metrics = rangeFacets.get(1).getBuckets().get(1).getMetrics().toArray();
|
metrics = rangeFacets.get(1).getBuckets().get(1).getMetrics().toArray();
|
||||||
assertEquals("6",((SimpleMetric) metrics[0]).getValue().get("count"));
|
assertEquals("6",((SimpleMetric) metrics[0]).getValue().get("count"));
|
||||||
facetInfo = rangeFacets.get(1).getBuckets().get(1).getBucketInfo();
|
facetInfo = rangeFacets.get(1).getBuckets().get(1).getBucketInfo();
|
||||||
assertEquals("100",facetInfo.get("start"));
|
assertEquals("100",facetInfo.get("start"));
|
||||||
assertEquals("200",facetInfo.get("end"));
|
assertEquals("200",facetInfo.get("end"));
|
||||||
assertEquals("content.size:(100 TO 200)", rangeFacets.get(1).getBuckets().get(1).getFilterQuery());
|
assertEquals("content.size:[100 TO 200>", rangeFacets.get(1).getBuckets().get(1).getFilterQuery());
|
||||||
|
assertEquals(null,rangeFacets.get(1).getBuckets().get(1).getBucketInfo().get("count"));
|
||||||
|
assertEquals("false",rangeFacets.get(1).getBuckets().get(0).getBucketInfo().get("endInclusive"));
|
||||||
|
assertEquals("true",rangeFacets.get(1).getBuckets().get(0).getBucketInfo().get("startInclusive"));
|
||||||
|
|
||||||
assertEquals("200 - 300",rangeFacets.get(1).getBuckets().get(2).getLabel());
|
assertEquals("[200 - 300)",rangeFacets.get(1).getBuckets().get(2).getLabel());
|
||||||
metrics = rangeFacets.get(1).getBuckets().get(2).getMetrics().toArray();
|
metrics = rangeFacets.get(1).getBuckets().get(2).getMetrics().toArray();
|
||||||
assertEquals("3",((SimpleMetric) metrics[0]).getValue().get("count"));
|
assertEquals("3",((SimpleMetric) metrics[0]).getValue().get("count"));
|
||||||
facetInfo = rangeFacets.get(1).getBuckets().get(2).getBucketInfo();
|
facetInfo = rangeFacets.get(1).getBuckets().get(2).getBucketInfo();
|
||||||
assertEquals("200",facetInfo.get("start"));
|
assertEquals("200",facetInfo.get("start"));
|
||||||
assertEquals("300",facetInfo.get("end"));
|
assertEquals("300",facetInfo.get("end"));
|
||||||
assertEquals("content.size:(200 TO 300)", rangeFacets.get(1).getBuckets().get(2).getFilterQuery());
|
assertEquals("content.size:[200 TO 300>", rangeFacets.get(1).getBuckets().get(2).getFilterQuery());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -34,6 +34,13 @@ import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_FTS_ALFRESC
|
|||||||
import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_LUCENE;
|
import static org.alfresco.service.cmr.search.SearchService.LANGUAGE_LUCENE;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.alfresco.rest.api.search.context.SearchRequestContext;
|
import org.alfresco.rest.api.search.context.SearchRequestContext;
|
||||||
import org.alfresco.rest.api.search.impl.SearchMapper;
|
import org.alfresco.rest.api.search.impl.SearchMapper;
|
||||||
import org.alfresco.rest.api.search.impl.StoreMapper;
|
import org.alfresco.rest.api.search.impl.StoreMapper;
|
||||||
@@ -1000,12 +1007,17 @@ public class SearchMapperTests
|
|||||||
assertEquals(searchParameters.getRanges(), rangeParams);
|
assertEquals(searchParameters.getRanges(), rangeParams);
|
||||||
|
|
||||||
rangeParams.clear();
|
rangeParams.clear();
|
||||||
rangeParams.add(new RangeParameters("content.size", "0", "100000", "1000",true,"before","lower",null,null));
|
List<String> includes = new ArrayList<String>();
|
||||||
|
includes.add("lower");
|
||||||
|
List<String> other = new ArrayList<String>();
|
||||||
|
includes.add("before");
|
||||||
|
|
||||||
|
rangeParams.add(new RangeParameters("content.size", "0", "100000", "1000",true, other,includes,null,null));
|
||||||
searchMapper.fromRange(searchParameters, rangeParams);
|
searchMapper.fromRange(searchParameters, rangeParams);
|
||||||
assertEquals(searchParameters.getRanges(), rangeParams);
|
assertEquals(searchParameters.getRanges(), rangeParams);
|
||||||
|
|
||||||
//Assert multiple ranges
|
//Assert multiple ranges
|
||||||
rangeParams.add(new RangeParameters("created", "2015-09-29T10:45:15.729Z", "2016-09-29T10:45:15.729Z", "+100DAY", true, "before", "lower", null, null));
|
rangeParams.add(new RangeParameters("created", "2015-09-29T10:45:15.729Z", "2016-09-29T10:45:15.729Z", "+100DAY", true, other, includes, null, null));
|
||||||
searchMapper.fromRange(searchParameters, rangeParams);
|
searchMapper.fromRange(searchParameters, rangeParams);
|
||||||
assertEquals(searchParameters.getRanges(), rangeParams);
|
assertEquals(searchParameters.getRanges(), rangeParams);
|
||||||
assertEquals(2,searchParameters.getRanges().size());
|
assertEquals(2,searchParameters.getRanges().size());
|
||||||
|
@@ -64,7 +64,7 @@ public class SerializerTestHelper implements RequestReader
|
|||||||
+ "\"facetFields\": {\"facets\": [{\"field\": \"cm:creator\",\"prefix\": \"myquery2\",\"sort\": \"COUNT\",\"missing\": \"false\"}, {\"field\": \"modifier\",\"label\": \"mylabel\",\"method\": \"FC\",\"mincount\": \"5\"}, {\"field\": \"owner\",\"label\": \"ownerLabel\"}]},"
|
+ "\"facetFields\": {\"facets\": [{\"field\": \"cm:creator\",\"prefix\": \"myquery2\",\"sort\": \"COUNT\",\"missing\": \"false\"}, {\"field\": \"modifier\",\"label\": \"mylabel\",\"method\": \"FC\",\"mincount\": \"5\"}, {\"field\": \"owner\",\"label\": \"ownerLabel\"}]},"
|
||||||
+ "\"facetQueries\": [{\"query\": \"cm:created:bob\",\"label\": \"small\"}],"
|
+ "\"facetQueries\": [{\"query\": \"cm:created:bob\",\"label\": \"small\"}],"
|
||||||
+ "\"pivots\": [{\"key\": \"mylabel\"}],"
|
+ "\"pivots\": [{\"key\": \"mylabel\"}],"
|
||||||
+ "\"ranges\": [{\"field\": \"content.size\",\"start\": \"0\",\"end\": \"300\",\"gap\": \"100\"}],"
|
+ "\"ranges\": [{\"field\": \"content.size\",\"start\": \"0\",\"end\": \"300\",\"gap\": \"100\",\"include\":[\"lower\"]}],"
|
||||||
+ "\"facetIntervals\": {\"sets\": [{ \"label\": \"king\", \"start\": \"1\", \"end\": \"2\",\"startInclusive\": true,\"endInclusive\": false}]"
|
+ "\"facetIntervals\": {\"sets\": [{ \"label\": \"king\", \"start\": \"1\", \"end\": \"2\",\"startInclusive\": true,\"endInclusive\": false}]"
|
||||||
+ ",\"intervals\": [{\"field\": \"cm:creator\",\"label\": \"creator\","
|
+ ",\"intervals\": [{\"field\": \"cm:creator\",\"label\": \"creator\","
|
||||||
+ "\"sets\": [{\"label\": \"last\",\"start\": \"a\",\"end\": \"b\",\"startInclusive\": false}]"
|
+ "\"sets\": [{\"label\": \"last\",\"start\": \"a\",\"end\": \"b\",\"startInclusive\": false}]"
|
||||||
|
Reference in New Issue
Block a user