Merged searchrep (5.2.1) to 5.2.N (5.2.1)

136623 gjames: SEARCH-409: Initial solr stats api


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@137032 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Gethin James
2017-06-01 11:06:54 +00:00
parent 6f2fc20e18
commit 3445581377
7 changed files with 213 additions and 33 deletions

View File

@@ -120,6 +120,7 @@ public class ResultMapperTests
+ " \"_DEFAULT_!800001579e3d1964!800001579e3d1969\": {\"name\": [\"some very <al>long<fresco> name\"],\"title\": [\"title1 is very <al>long<fresco>\"], \"DBID\": \"521\"},"
+ " \"_DEFAULT_!800001579e3d1964!800001579e3d196a\": {\"name\": [\"this is some <al>long<fresco> text. It\", \" has the word <al>long<fresco> in many places\", \". In fact, it has <al>long<fresco> on some\", \" happens to <al>long<fresco> in this case.\"], \"DBID\": \"1475846153692\"}"
+ "},"
+ "\"stats\":{\"stats_fields\":{\"creator\":{\"min\":\"System\",\"max\":\"mjackson\",\"count\":\"990\",\"missing\":\"290\"}, \"created\":{\"sumOfSquares\":2.1513045770343806E27,\"min\":\"2011-02-15T20:16:27.080Z\",\"max\":\"2017-04-10T15:06:30.143Z\",\"mean\":\"2016-09-05T04:20:12.898Z\",\"count\":990,\"missing\":290,\"sum\":1.458318720769983E15,\"stddev\":5.6250677994522545E10}}},"
+ "\"processedDenies\":true, \"lastIndexedTx\":34}";
public static final Params EMPTY_PARAMS = Params.valueOf((String)null,(String)null,(WebScriptRequest) null);
public static final String FROZEN_ID = "frozen";
@@ -305,7 +306,7 @@ public class ResultMapperTests
assertEquals("last",intervalFacets.get(0).getBuckets().get(0).getLabel());
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"));
assertEquals("4",intervalFacets.get(0).getBuckets().get(0).getMetrics().get(0).getValue().get("count"));
//Requests search Query
assertNotNull(searchContext.getRequest());
@@ -334,6 +335,8 @@ public class ResultMapperTests
assertEquals("admin",nestedBucket2.getLabel());
assertEquals("modifier:admin",nestedBucket2.getFilterQuery());
assertEquals("{count=4}",nestedBucket2.getMetrics().get(0).getValue().toString());
}
@Test
@@ -390,24 +393,24 @@ public class ResultMapperTests
assertEquals("last",intervalFacets.get(0).getBuckets().get(0).getLabel());
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"));
assertEquals("4",intervalFacets.get(0).getBuckets().get(0).getMetrics().get(0).getValue().get("count"));
assertEquals("TheCreated",intervalFacets.get(1).getLabel());
assertEquals("earlier",intervalFacets.get(1).getBuckets().get(0).getLabel());
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(5,intervalFacets.get(1).getBuckets().get(0).getMetrics().get(0).getValue().get("count"));
assertEquals("5",intervalFacets.get(1).getBuckets().get(0).getMetrics().get(0).getValue().get("count"));
assertEquals("lastYear",intervalFacets.get(1).getBuckets().get(1).getLabel());
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(0,intervalFacets.get(1).getBuckets().get(1).getMetrics().get(0).getValue().get("count"));
assertEquals("0",intervalFacets.get(1).getBuckets().get(1).getMetrics().get(0).getValue().get("count"));
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(METRIC_TYPE.count,intervalFacets.get(1).getBuckets().get(2).getMetrics().get(0).getType());
assertEquals(854,intervalFacets.get(1).getBuckets().get(2).getMetrics().get(0).getValue().get("count"));
assertEquals("854",intervalFacets.get(1).getBuckets().get(2).getMetrics().get(0).getValue().get("count"));
}
@Test

View File

@@ -62,6 +62,7 @@ import org.alfresco.service.cmr.search.LimitBy;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchParameters.FieldFacet;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.search.StatsRequestParameters;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -584,17 +585,88 @@ public class SearchMapperTests
assertEquals(searchParameters.getHighlight(), highlightParameters);
}
@Test
public void fromStats() throws Exception
{
SearchParameters searchParameters = new SearchParameters();
searchMapper.fromStats(searchParameters, null);
List<StatsRequestParameters> statsRequestParameters = new ArrayList<>(1);
statsRequestParameters.add(new StatsRequestParameters(null, null, null, null, null,null, null, null, null,null, null, null,null, null, null, null));
try
{
searchMapper.fromStats(searchParameters, statsRequestParameters);
}
catch (IllegalArgumentException iae)
{
assertTrue(iae.getLocalizedMessage().contains("field is a mandatory parameter"));
}
statsRequestParameters.clear();
statsRequestParameters.add(new StatsRequestParameters("cm:content", "myLabel", null, null,null, null, null, null,null, null, null, null,null, null, null, null));
searchMapper.fromStats(searchParameters, statsRequestParameters);
assertEquals(1 ,searchParameters.getStats().size());
statsRequestParameters.clear();
statsRequestParameters.add(new StatsRequestParameters("cm:content", "myLabel", Arrays.asList(3.4f, 12f, 10f), null, null,null, null, null, null,null, null, null,null, null, null, null));
searchMapper.fromStats(searchParameters, statsRequestParameters);
assertEquals(1 ,searchParameters.getStats().size());
statsRequestParameters.clear();
statsRequestParameters.add(new StatsRequestParameters("cm:content", "myLabel", Arrays.asList(-3.4f), null, null,null, null, null, null,null, null, null,null, null, null, null));
try
{
searchMapper.fromStats(searchParameters, statsRequestParameters);
}
catch (IllegalArgumentException iae)
{
assertTrue(iae.getLocalizedMessage().contains("Invalid percentile -3.4"));
}
statsRequestParameters.clear();
statsRequestParameters.add(new StatsRequestParameters("cm:content", "myLabel", Arrays.asList(101f),null, null,null, null, null, null,null, null, null,null, null, null, null));
try
{
searchMapper.fromStats(searchParameters, statsRequestParameters);
}
catch (IllegalArgumentException iae)
{
assertTrue(iae.getLocalizedMessage().contains("Invalid percentile 101"));
}
statsRequestParameters.clear();
statsRequestParameters.add(new StatsRequestParameters("cm:content", "myLabel", null, null,null, null, null, null,null, null, null, null,null, true, 12f, null));
try
{
searchMapper.fromStats(searchParameters, statsRequestParameters);
}
catch (IllegalArgumentException iae)
{
assertTrue(iae.getLocalizedMessage().contains("Invalid cardinality accuracy 12.0"));
}
statsRequestParameters.clear();
statsRequestParameters.add(new StatsRequestParameters("cm:content", "myLabel", null, null,null, null, null, null,null, null, null, null,null, null, 12f, null));
searchMapper.fromStats(searchParameters, statsRequestParameters);
//cardinality is ignored if not true
assertEquals(1 ,searchParameters.getStats().size());
}
@Test
public void fromPivot() throws Exception
{
SearchParameters searchParameters = new SearchParameters();
searchMapper.fromPivot(searchParameters,null, null, null);
searchMapper.fromPivot(searchParameters, null, null, null, null);
List<FacetField> facets = new ArrayList<>(1);
facets.add(new FacetField("myfield",null,null,null,null,null,null,null,null,null,null));
FacetFields ff = new FacetFields(facets);
searchMapper.fromFacetFields(searchParameters,ff);
searchMapper.fromPivot(searchParameters,ff, null, null);
searchMapper.fromPivot(searchParameters, null, ff, null, null);
assertEquals(1 ,searchParameters.getFieldFacets().size());
assertEquals(0 ,searchParameters.getPivots().size());
@@ -603,7 +675,7 @@ public class SearchMapperTests
try
{
searchMapper.fromPivot(searchParameters,ff, Arrays.asList(new Pivot(null)), null);
searchMapper.fromPivot(searchParameters, null, ff, Arrays.asList(new Pivot(null)), null);
fail();
}
catch (IllegalArgumentException iae)
@@ -614,7 +686,7 @@ public class SearchMapperTests
try
{
searchMapper.fromPivot(searchParameters,ff, Arrays.asList(new Pivot("")), null);
searchMapper.fromPivot(searchParameters, null, ff, Arrays.asList(new Pivot("")), null);
fail();
}
catch (IllegalArgumentException iae)
@@ -623,20 +695,25 @@ public class SearchMapperTests
assertNotNull(iae);
}
SearchRequestContext searchRequestContext = SearchRequestContext.from(minimalQuery());
//"bob" doesn't refer to a field facet but its the last one so lets be kind
searchMapper.fromPivot(searchParameters, null, ff, Arrays.asList(new Pivot("bob")), searchRequestContext);
try
{
searchMapper.fromPivot(searchParameters,ff, Arrays.asList(new Pivot("bob")), null);
searchMapper.fromPivot(searchParameters, null, ff, Arrays.asList(new Pivot("ken"),new Pivot("bob")), searchRequestContext);
fail();
}
catch (InvalidArgumentException iae)
{
//"bob" doesn't refer to a field facet
//"ken" doesn't refer to a field facet and its not the last one
assertNotNull(iae);
}
searchParameters = new SearchParameters();
SearchRequestContext searchRequestContext = SearchRequestContext.from(minimalQuery());
searchMapper.fromPivot(searchParameters,ff, Arrays.asList(new Pivot("myfield")), searchRequestContext);
searchMapper.fromPivot(searchParameters, null, ff, Arrays.asList(new Pivot("myfield")), searchRequestContext);
searchMapper.fromFacetFields(searchParameters,ff);
//Moved from a field facet to a pivot
assertEquals(0 ,searchParameters.getFieldFacets().size());
@@ -717,7 +794,7 @@ public class SearchMapperTests
private SearchQuery minimalQuery()
{
Query query = new Query("cmis", "foo", "");
SearchQuery sq = new SearchQuery(query, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
SearchQuery sq = new SearchQuery(query, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
return sq;
}
@Test

View File

@@ -166,6 +166,10 @@ public class SearchQuerySerializerTests
assertEquals(1,searchQuery.getPivots().size());
assertEquals("mylabel",searchQuery.getPivots().get(0).getKey());
assertEquals(1,searchQuery.getStats().size());
assertEquals("cm:creator",searchQuery.getStats().get(0).getField());
assertEquals("mylabel",searchQuery.getStats().get(0).getLabel());
}
@Test

View File

@@ -70,6 +70,7 @@ public class SerializerTestHelper implements RequestReader
+ "},"
+ "{\"label\":\"TheCreated\",\"field\":\"cm:created\",\"sets\":[{\"label\":\"lastYear\",\"start\":\"2016\",\"end\":\"2017\",\"endInclusive\":false},{\"label\":\"currentYear\",\"start\":\"NOW/YEAR\",\"end\":\"NOW/YEAR+1YEAR\"},{\"label\":\"earlier\",\"start\":\"*\",\"end\":\"2016\",\"endInclusive\":false}]}"
+ "]},"
+ "\"stats\": [{\"field\": \"cm:creator\", \"label\": \"mylabel\"}],"
+ "\"spellcheck\": {\"query\": \"alfrezco\"},"
+ "\"limits\": {\"permissionEvaluationCount\": \"2000\",\"permissionEvaluationTime\": \"5000\"},"
+ "\"scope\": { \"locations\": [\"nodes\"]},"