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

137034 gjames: Merged searchrep (5.2.1) to 5.2.N (5.2.1)
      136625 gjames: SEARCH-409: Changing metrics to a Set


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@137549 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrei Rebegea
2017-06-15 11:12:59 +00:00
parent 7b0a2cadf8
commit aa13c3c07a
2 changed files with 57 additions and 53 deletions

View File

@@ -78,10 +78,12 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; 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.Map.Entry; import java.util.Map.Entry;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -382,7 +384,7 @@ public class ResultMapper
return facetResults; return facetResults;
} }
protected List<GenericFacetResponse> getFieldStats(SearchRequestContext searchRequestContext, Map<String, List<Metric>> stats) protected List<GenericFacetResponse> getFieldStats(SearchRequestContext searchRequestContext, Map<String, Set<Metric>> stats)
{ {
if(stats != null && !stats.isEmpty()) if(stats != null && !stats.isEmpty())
{ {
@@ -507,7 +509,7 @@ public class ResultMapper
} }
} }
} }
GenericBucket bucket = new GenericBucket(buck.getFirst(), filterQuery, null , Arrays.asList(new SimpleMetric(METRIC_TYPE.count,String.valueOf(buck.getSecond()))), null); GenericBucket bucket = new GenericBucket(buck.getFirst(), filterQuery, null , new HashSet<Metric>(Arrays.asList(new SimpleMetric(METRIC_TYPE.count,String.valueOf(buck.getSecond())))), null);
buckets.add(bucket); buckets.add(bucket);
} }
ffcs.add(new GenericFacetResponse(FACET_TYPE.interval, facet.getKey(), buckets)); ffcs.add(new GenericFacetResponse(FACET_TYPE.interval, facet.getKey(), buckets));

View File

@@ -41,8 +41,11 @@ 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;
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericFacetResponse.FACET_TYPE; import org.alfresco.repo.search.impl.solr.facet.facetsresponse.GenericFacetResponse.FACET_TYPE;
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.ListMetric;
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.Metric; import org.alfresco.repo.search.impl.solr.facet.facetsresponse.Metric;
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.Metric.METRIC_TYPE; import org.alfresco.repo.search.impl.solr.facet.facetsresponse.Metric.METRIC_TYPE;
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.PercentileMetric;
import org.alfresco.repo.search.impl.solr.facet.facetsresponse.SimpleMetric;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.version.Version2Model; import org.alfresco.repo.version.Version2Model;
import org.alfresco.repo.version.common.VersionImpl; import org.alfresco.repo.version.common.VersionImpl;
@@ -80,6 +83,7 @@ import org.alfresco.service.cmr.version.VersionHistory;
import org.alfresco.service.cmr.version.VersionService; import org.alfresco.service.cmr.version.VersionService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.util.GUID; import org.alfresco.util.GUID;
import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import org.json.JSONTokener; import org.json.JSONTokener;
@@ -96,6 +100,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -306,8 +311,9 @@ public class ResultMapperTests
assertEquals("creator",intervalFacets.get(0).getLabel()); assertEquals("creator",intervalFacets.get(0).getLabel());
assertEquals("last",intervalFacets.get(0).getBuckets().get(0).getLabel()); assertEquals("last",intervalFacets.get(0).getBuckets().get(0).getLabel());
assertEquals("cm:creator:<a TO b]",intervalFacets.get(0).getBuckets().get(0).getFilterQuery()); assertEquals("cm:creator:<a TO b]",intervalFacets.get(0).getBuckets().get(0).getFilterQuery());
assertEquals(METRIC_TYPE.count,intervalFacets.get(0).getBuckets().get(0).getMetrics().get(0).getType()); Metric[] metrics = intervalFacets.get(0).getBuckets().get(0).getMetrics().toArray(new Metric[intervalFacets.get(0).getBuckets().get(0).getMetrics().size()]);
assertEquals("4",intervalFacets.get(0).getBuckets().get(0).getMetrics().get(0).getValue().get("count")); assertEquals(METRIC_TYPE.count,metrics[0].getType());
assertEquals("4",metrics[0].getValue().get("count"));
//Requests search Query //Requests search Query
assertNotNull(searchContext.getRequest()); assertNotNull(searchContext.getRequest());
@@ -322,7 +328,8 @@ public class ResultMapperTests
GenericBucket pivotBucket = pivotFacet.getBuckets().get(1); GenericBucket pivotBucket = pivotFacet.getBuckets().get(1);
assertEquals("mjackson",pivotBucket.getLabel()); assertEquals("mjackson",pivotBucket.getLabel());
assertEquals("creator:mjackson",pivotBucket.getFilterQuery()); assertEquals("creator:mjackson",pivotBucket.getFilterQuery());
assertEquals("{count=7}",pivotBucket.getMetrics().get(0).getValue().toString()); metrics = pivotBucket.getMetrics().toArray(new Metric[pivotBucket.getMetrics().size()]);
assertEquals("{count=7}",metrics[0].getValue().toString());
assertEquals(1,pivotBucket.getFacets().size()); assertEquals(1,pivotBucket.getFacets().size());
GenericFacetResponse nestedFacet = pivotBucket.getFacets().get(0); GenericFacetResponse nestedFacet = pivotBucket.getFacets().get(0);
assertEquals(FACET_TYPE.pivot,nestedFacet.getType()); assertEquals(FACET_TYPE.pivot,nestedFacet.getType());
@@ -331,57 +338,48 @@ public class ResultMapperTests
GenericBucket nestedBucket = nestedFacet.getBuckets().get(0); GenericBucket nestedBucket = nestedFacet.getBuckets().get(0);
assertEquals("mjackson",nestedBucket.getLabel()); assertEquals("mjackson",nestedBucket.getLabel());
assertEquals("modifier:mjackson",nestedBucket.getFilterQuery()); assertEquals("modifier:mjackson",nestedBucket.getFilterQuery());
assertEquals("{count=3}",nestedBucket.getMetrics().get(0).getValue().toString());
metrics = nestedBucket.getMetrics().toArray(new Metric[nestedBucket.getMetrics().size()]);
assertEquals("{count=3}",metrics[0].getValue().toString());
GenericBucket nestedBucket2 = nestedFacet.getBuckets().get(1); GenericBucket nestedBucket2 = nestedFacet.getBuckets().get(1);
assertEquals("admin",nestedBucket2.getLabel()); assertEquals("admin",nestedBucket2.getLabel());
assertEquals("modifier:admin",nestedBucket2.getFilterQuery()); assertEquals("modifier:admin",nestedBucket2.getFilterQuery());
assertEquals("{count=4}",nestedBucket2.getMetrics().get(0).getValue().toString()); metrics = nestedBucket2.getMetrics().toArray(new Metric[nestedBucket2.getMetrics().size()]);
assertEquals("{count=4}",metrics[0].getValue().toString());
//Stats //Stats
GenericFacetResponse statsFacet = searchContext.getFacets().get(3); GenericFacetResponse statsFacet = searchContext.getFacets().get(3);
assertEquals(FACET_TYPE.stats,statsFacet.getType()); assertEquals(FACET_TYPE.stats,statsFacet.getType());
assertEquals("created",statsFacet.getLabel()); assertEquals("created",statsFacet.getLabel());
List<Metric> metrics = statsFacet.getBuckets().get(0).getMetrics(); Set<Metric> statsMetrics = statsFacet.getBuckets().get(0).getMetrics();
assertEquals(8,metrics.size()); assertEquals(8,statsMetrics.size());
assertEquals(METRIC_TYPE.sumOfSquares,metrics.get(0).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.sumOfSquares, 2.1513045770343806E27 )));
assertEquals(METRIC_TYPE.min,metrics.get(1).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.min, "2011-02-15T20:16:27.080Z" )));
assertEquals(METRIC_TYPE.max,metrics.get(2).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.max, "2017-04-10T15:06:30.143Z" )));
assertEquals(METRIC_TYPE.mean,metrics.get(3).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.mean, "2016-09-05T04:20:12.898Z" )));
assertEquals(METRIC_TYPE.count,metrics.get(4).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.count, 990 )));
assertEquals(METRIC_TYPE.missing,metrics.get(5).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.missing, 290 )));
assertEquals(METRIC_TYPE.sum,metrics.get(6).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.sum, 1.458318720769983E15)));
assertEquals(METRIC_TYPE.stddev,metrics.get(7).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.stddev, 5.6250677994522545E10)));
statsFacet = searchContext.getFacets().get(4); statsFacet = searchContext.getFacets().get(4);
metrics = statsFacet.getBuckets().get(0).getMetrics();
assertEquals("numericLabel",statsFacet.getLabel()); assertEquals("numericLabel",statsFacet.getLabel());
assertEquals(7,metrics.size()); statsMetrics = statsFacet.getBuckets().get(0).getMetrics();
assertEquals(METRIC_TYPE.sumOfSquares,metrics.get(0).getType()); assertEquals(7,statsMetrics.size());
assertEquals("{sumOfSquares=0}",metrics.get(0).getValue().toString());
/** assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.sumOfSquares, 0)));
assertEquals(METRIC_TYPE.min,metrics.get(1).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.count, 0)));
assertEquals("{min=null}",metrics.get(1).getValue().toString()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.missing, 0)));
assertEquals(METRIC_TYPE.max,metrics.get(2).getType()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.sum, 0)));
assertEquals("{max=null}",metrics.get(2).getValue().toString()); assertTrue(statsMetrics.contains(new SimpleMetric(METRIC_TYPE.stddev, 0)));
assertEquals(METRIC_TYPE.mean,metrics.get(3).getType()); JSONArray dVals = new JSONArray(Arrays.asList(12, 13, 14, 15, 16, 17, 1));
assertEquals("{mean=NaN}",metrics.get(3).getValue().toString()); assertTrue(statsMetrics.contains(new ListMetric(METRIC_TYPE.distinctValues, dVals)));
**/ JSONArray pers = new JSONArray(Arrays.asList("0.99",20.0685, "0.0", 12.0));
assertEquals(METRIC_TYPE.percentiles,metrics.get(1).getType()); assertTrue(statsMetrics.contains(new PercentileMetric(METRIC_TYPE.percentiles, pers)));
assertEquals("{percentiles={0.99=20.0685, 0.0=12.0}}",metrics.get(1).getValue().toString());
Map percentiles = (Map) metrics.get(1).getValue().get("percentiles"); assertEquals("min must be excluded because its null",0,statsMetrics.stream().filter(metric -> METRIC_TYPE.min.equals(metric.getType())).count());
assertEquals(2, percentiles.size()); assertEquals("max must be excluded because its null",0,statsMetrics.stream().filter(metric -> METRIC_TYPE.max.equals(metric.getType())).count());
assertEquals(METRIC_TYPE.count,metrics.get(2).getType()); assertEquals("mean must be excluded because its NaN",0,statsMetrics.stream().filter(metric -> METRIC_TYPE.mean.equals(metric.getType())).count());
assertEquals("{count=0}",metrics.get(2).getValue().toString());
assertEquals(METRIC_TYPE.missing,metrics.get(3).getType());
assertEquals("{missing=0}",metrics.get(3).getValue().toString());
assertEquals(METRIC_TYPE.distinctValues,metrics.get(4).getType());
List distinctValues = (List) metrics.get(4).getValue().get("distinctValues");
assertEquals(7, distinctValues.size());
assertEquals("{distinctValues=[12, 13, 14, 15, 16, 17, 1]}",metrics.get(4).getValue().toString());
assertEquals(METRIC_TYPE.sum,metrics.get(5).getType());
assertEquals("{sum=0}",metrics.get(5).getValue().toString());
assertEquals(METRIC_TYPE.stddev,metrics.get(6).getType());
assertEquals("{stddev=0}",metrics.get(6).getValue().toString());
} }
@Test @Test
@@ -437,25 +435,29 @@ public class ResultMapperTests
assertEquals("creator",intervalFacets.get(0).getLabel()); assertEquals("creator",intervalFacets.get(0).getLabel());
assertEquals("last",intervalFacets.get(0).getBuckets().get(0).getLabel()); assertEquals("last",intervalFacets.get(0).getBuckets().get(0).getLabel());
assertEquals("cm:creator:<a TO b]",intervalFacets.get(0).getBuckets().get(0).getFilterQuery()); assertEquals("cm:creator:<a TO b]",intervalFacets.get(0).getBuckets().get(0).getFilterQuery());
assertEquals(METRIC_TYPE.count,intervalFacets.get(0).getBuckets().get(0).getMetrics().get(0).getType());
assertEquals("4",intervalFacets.get(0).getBuckets().get(0).getMetrics().get(0).getValue().get("count"));
Object[] metrics = intervalFacets.get(0).getBuckets().get(0).getMetrics().toArray();
assertEquals(METRIC_TYPE.count,((SimpleMetric) metrics[0]).getType());
assertEquals("4",((SimpleMetric) metrics[0]).getValue().get("count"));
metrics = intervalFacets.get(1).getBuckets().get(0).getMetrics().toArray();
assertEquals("TheCreated",intervalFacets.get(1).getLabel()); assertEquals("TheCreated",intervalFacets.get(1).getLabel());
assertEquals("earlier",intervalFacets.get(1).getBuckets().get(0).getLabel()); assertEquals("earlier",intervalFacets.get(1).getBuckets().get(0).getLabel());
assertEquals("cm:created:[* TO 2016>",intervalFacets.get(1).getBuckets().get(0).getFilterQuery()); assertEquals("cm:created:[* TO 2016>",intervalFacets.get(1).getBuckets().get(0).getFilterQuery());
assertEquals(METRIC_TYPE.count,intervalFacets.get(1).getBuckets().get(0).getMetrics().get(0).getType()); assertEquals(METRIC_TYPE.count,((SimpleMetric) metrics[0]).getType());
assertEquals("5",intervalFacets.get(1).getBuckets().get(0).getMetrics().get(0).getValue().get("count")); assertEquals("5",((SimpleMetric) metrics[0]).getValue().get("count"));
metrics = intervalFacets.get(1).getBuckets().get(1).getMetrics().toArray();
assertEquals("lastYear",intervalFacets.get(1).getBuckets().get(1).getLabel()); assertEquals("lastYear",intervalFacets.get(1).getBuckets().get(1).getLabel());
assertEquals("cm:created:[2016 TO 2017>",intervalFacets.get(1).getBuckets().get(1).getFilterQuery()); assertEquals("cm:created:[2016 TO 2017>",intervalFacets.get(1).getBuckets().get(1).getFilterQuery());
assertEquals(METRIC_TYPE.count,intervalFacets.get(1).getBuckets().get(1).getMetrics().get(0).getType()); assertEquals(METRIC_TYPE.count,((SimpleMetric) metrics[0]).getType());
assertEquals("0",intervalFacets.get(1).getBuckets().get(1).getMetrics().get(0).getValue().get("count")); assertEquals("0",((SimpleMetric) metrics[0]).getValue().get("count"));
metrics = intervalFacets.get(1).getBuckets().get(2).getMetrics().toArray();
assertEquals("currentYear",intervalFacets.get(1).getBuckets().get(2).getLabel()); assertEquals("currentYear",intervalFacets.get(1).getBuckets().get(2).getLabel());
assertEquals("cm:created:[NOW/YEAR TO NOW/YEAR+1YEAR]",intervalFacets.get(1).getBuckets().get(2).getFilterQuery()); assertEquals("cm:created:[NOW/YEAR TO NOW/YEAR+1YEAR]",intervalFacets.get(1).getBuckets().get(2).getFilterQuery());
assertEquals(METRIC_TYPE.count,intervalFacets.get(1).getBuckets().get(2).getMetrics().get(0).getType()); assertEquals(METRIC_TYPE.count,((SimpleMetric) metrics[0]).getType());
assertEquals("854",intervalFacets.get(1).getBuckets().get(2).getMetrics().get(0).getValue().get("count")); assertEquals("854",((SimpleMetric) metrics[0]).getValue().get("count"));
} }
@Test @Test