use of org.alfresco.service.cmr.search.Interval in project alfresco-remote-api by Alfresco.
the class SearchMapper method fromFacetIntervals.
/**
* Sets the Interval Parameters object on search parameters
*
* It does some valiation then takes any "SETS" at the top level and sets them at every field level.
*
* @param sp SearchParameters
* @param facetIntervals IntervalParameters
*/
public void fromFacetIntervals(SearchParameters sp, IntervalParameters facetIntervals) {
if (facetIntervals != null) {
ParameterCheck.mandatory("facetIntervals intervals", facetIntervals.getIntervals());
Set<IntervalSet> globalSets = facetIntervals.getSets();
validateSets(globalSets, "facetIntervals");
if (facetIntervals.getIntervals() != null && !facetIntervals.getIntervals().isEmpty()) {
List<String> intervalLabels = new ArrayList<>(facetIntervals.getIntervals().size());
for (Interval interval : facetIntervals.getIntervals()) {
ParameterCheck.mandatory("facetIntervals intervals field", interval.getField());
validateSets(interval.getSets(), "facetIntervals intervals " + interval.getField());
if (interval.getSets() != null && globalSets != null) {
interval.getSets().addAll(globalSets);
}
ParameterCheck.mandatoryCollection("facetIntervals intervals sets", interval.getSets());
List<Map.Entry<String, Long>> duplicateSetLabels = interval.getSets().stream().collect(groupingBy(IntervalSet::getLabel, Collectors.counting())).entrySet().stream().filter(e -> e.getValue().intValue() > 1).collect(toList());
if (!duplicateSetLabels.isEmpty()) {
throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, new Object[] { ": duplicate set interval label " + duplicateSetLabels.toString() });
}
if (interval.getLabel() != null)
intervalLabels.add(interval.getLabel());
}
List<Map.Entry<String, Long>> duplicateIntervalLabels = intervalLabels.stream().collect(groupingBy(Function.identity(), Collectors.counting())).entrySet().stream().filter(e -> e.getValue().intValue() > 1).collect(toList());
if (!duplicateIntervalLabels.isEmpty()) {
throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, new Object[] { ": duplicate interval label " + duplicateIntervalLabels.toString() });
}
}
if (facetIntervals.getSets() != null) {
facetIntervals.getSets().clear();
}
}
sp.setInterval(facetIntervals);
}
use of org.alfresco.service.cmr.search.Interval in project alfresco-remote-api by Alfresco.
the class SearchMapperTests method fromInterval.
@Test
public void fromInterval() throws Exception {
SearchParameters searchParameters = new SearchParameters();
IntervalParameters intervalParameters = new IntervalParameters(null, null);
try {
searchMapper.fromFacetIntervals(searchParameters, intervalParameters);
fail();
} catch (IllegalArgumentException iae) {
// intervals is required
assertNotNull(iae);
}
Set<IntervalSet> intervalSets = new HashSet(Arrays.asList(new IntervalSet(null, "1", null, null, null)));
List<Interval> intervalList = Arrays.asList(new Interval(null, "bob", null));
intervalParameters = new IntervalParameters(intervalSets, intervalList);
try {
searchMapper.fromFacetIntervals(searchParameters, intervalParameters);
fail();
} catch (IllegalArgumentException iae) {
// facetIntervals intervals field is required
assertNotNull(iae);
}
intervalList = Arrays.asList(new Interval("aFileld", "bob", null));
intervalParameters = new IntervalParameters(intervalSets, intervalList);
try {
searchMapper.fromFacetIntervals(searchParameters, intervalParameters);
fail();
} catch (IllegalArgumentException iae) {
// set start is required
assertNotNull(iae);
}
intervalSets = new HashSet(Arrays.asList(new IntervalSet("1", null, null, null, true)));
intervalParameters = new IntervalParameters(intervalSets, intervalList);
try {
searchMapper.fromFacetIntervals(searchParameters, intervalParameters);
fail();
} catch (IllegalArgumentException iae) {
// set end is required
assertNotNull(iae);
}
intervalSets = new HashSet<>();
intervalSets.add(new IntervalSet("0", "3", "bob", null, null));
intervalSets.add(new IntervalSet("30", "50", "bill", true, true));
Set<IntervalSet> anIntervalSet = new HashSet<>();
anIntervalSet.add(new IntervalSet("1", "10", "bert", false, false));
intervalList = Arrays.asList(new Interval("cm:price", "Price", null), new Interval("cm:price", "Price", anIntervalSet));
intervalParameters = new IntervalParameters(intervalSets, intervalList);
try {
searchMapper.fromFacetIntervals(searchParameters, intervalParameters);
fail();
} catch (InvalidArgumentException iae) {
// duplicate labels
assertNotNull(iae);
}
intervalList = Arrays.asList(new Interval("cm:price", "Prices", null), new Interval("cm:price", "Pricey", anIntervalSet));
intervalParameters = new IntervalParameters(intervalSets, intervalList);
searchMapper.fromFacetIntervals(searchParameters, intervalParameters);
assertEquals(searchParameters.getInterval(), intervalParameters);
}
use of org.alfresco.service.cmr.search.Interval in project alfresco-remote-api by Alfresco.
the class SearchQuerySerializerTests method testDeserializeQuery.
@Test
public void testDeserializeQuery() throws IOException {
SearchQuery searchQuery = helper.searchQueryFromJson();
assertEquals(SearchQuery.class, searchQuery.getClass());
assertEquals("afts", searchQuery.getQuery().getLanguage());
assertEquals("g*", searchQuery.getQuery().getQuery());
assertEquals("great", searchQuery.getQuery().getUserQuery());
assertEquals(99, searchQuery.getPaging().getMaxItems());
assertEquals(4, searchQuery.getPaging().getSkipCount());
assertEquals(2, searchQuery.getInclude().size());
assertTrue(searchQuery.getInclude().contains("aspectNames"));
assertTrue(searchQuery.getInclude().contains("properties"));
assertEquals(1, searchQuery.getSort().size());
assertEquals(2, searchQuery.getTemplates().size());
Default defaults = searchQuery.getDefaults();
assertEquals("namesp", defaults.getNamespace());
assertEquals("myfield", defaults.getDefaultFieldName());
assertEquals("AND", defaults.getDefaultFTSOperator());
assertEquals(2, defaults.getTextAttributes().size());
assertTrue(defaults.getTextAttributes().contains("roy"));
assertTrue(defaults.getTextAttributes().contains("king"));
assertEquals(2, searchQuery.getFilterQueries().size());
assertEquals("myquery", searchQuery.getFilterQueries().get(0).getQuery());
assertEquals(2, searchQuery.getFilterQueries().get(0).getTags().size());
assertEquals("myquery2", searchQuery.getFilterQueries().get(1).getQuery());
assertEquals(1, searchQuery.getFacetQueries().size());
assertEquals("cm:created:bob", searchQuery.getFacetQueries().get(0).getQuery());
assertEquals("small", searchQuery.getFacetQueries().get(0).getLabel());
assertEquals("alfrezco", searchQuery.getSpellcheck().getQuery());
assertEquals(1, searchQuery.getScope().getLocations().size());
assertEquals(StoreMapper.LIVE_NODES, searchQuery.getScope().getLocations().get(0));
assertEquals(3, searchQuery.getFacetFields().getFacets().size());
FacetField ff = searchQuery.getFacetFields().getFacets().get(0);
assertEquals("cm:creator", ff.getField());
assertEquals("myquery2", ff.getPrefix());
assertEquals("COUNT", ff.getSort());
assertEquals(false, ff.getMissing());
ff = searchQuery.getFacetFields().getFacets().get(1);
assertEquals("modifier", ff.getField());
assertEquals("mylabel", ff.getLabel());
assertEquals("FC", ff.getMethod());
assertEquals(Integer.valueOf(5), ff.getMincount());
assertEquals(2000, searchQuery.getLimits().getPermissionEvaluationCount().intValue());
assertEquals(5000, searchQuery.getLimits().getPermissionEvaluationTime().intValue());
assertEquals(2, searchQuery.getFields().size());
assertTrue(searchQuery.getFields().contains("id"));
assertTrue(searchQuery.getFields().contains("name"));
// Highlight
assertEquals("]", searchQuery.getHighlight().getPostfix());
assertEquals("[", searchQuery.getHighlight().getPrefix());
assertEquals(20, searchQuery.getHighlight().getSnippetCount().intValue());
assertEquals(10, searchQuery.getHighlight().getFragmentSize().intValue());
assertEquals(true, searchQuery.getHighlight().getMergeContiguous());
assertEquals(40, searchQuery.getHighlight().getMaxAnalyzedChars().intValue());
assertEquals(true, searchQuery.getHighlight().getUsePhraseHighlighter());
assertEquals(2, searchQuery.getHighlight().getFields().size());
FieldHighlightParameters high1 = searchQuery.getHighlight().getFields().get(0);
assertEquals("my", high1.getField());
assertEquals("ยก", high1.getPostfix());
assertEquals("?", high1.getPrefix());
assertEquals(23, high1.getSnippetCount().intValue());
assertEquals(5, high1.getFragmentSize().intValue());
assertEquals(true, high1.getMergeContiguous());
FieldHighlightParameters high2 = searchQuery.getHighlight().getFields().get(1);
assertEquals("your", high2.getField());
assertEquals(")", high2.getPostfix());
assertEquals("(", high2.getPrefix());
assertEquals(3, high2.getSnippetCount().intValue());
assertEquals(15, high2.getFragmentSize().intValue());
assertEquals(false, high2.getMergeContiguous());
// Facet intervals
IntervalParameters ip = searchQuery.getFacetIntervals();
assertNotNull(ip);
assertEquals(1, ip.getSets().size());
IntervalSet expected = new IntervalSet("1", "2", "king", true, false);
assertTrue(ip.getSets().contains(expected));
assertEquals(2, ip.getIntervals().size());
Interval interval = ip.getIntervals().get(0);
assertEquals("creator", interval.getLabel());
assertEquals("cm:creator", interval.getField());
expected = new IntervalSet("a", "b", "last", false, true);
assertTrue(interval.getSets().contains(expected));
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());
// Range Facet
List<RangeParameters> ranges = searchQuery.getFacetRanges();
assertNotNull(ranges);
}
use of org.alfresco.service.cmr.search.Interval in project alfresco-remote-api by Alfresco.
the class ResultMapper method getGenericFacetsForIntervals.
/**
* Returns generic faceting responses for Intervals
* @param facetFields
* @param searchQuery
* @return GenericFacetResponse
*/
protected static List<GenericFacetResponse> getGenericFacetsForIntervals(Map<String, List<Pair<String, Integer>>> facetFields, SearchQuery searchQuery) {
if (facetFields != null && !facetFields.isEmpty()) {
List<GenericFacetResponse> ffcs = new ArrayList<>(facetFields.size());
for (Entry<String, List<Pair<String, Integer>>> facet : facetFields.entrySet()) {
if (facet.getValue() != null && !facet.getValue().isEmpty()) {
List<GenericBucket> buckets = new ArrayList<>(facet.getValue().size());
for (Pair<String, Integer> buck : facet.getValue()) {
String filterQuery = null;
Map<String, String> bucketInfo = new HashMap<>();
if (searchQuery != null && searchQuery.getFacetIntervals() != null && searchQuery.getFacetIntervals().getIntervals() != null && !searchQuery.getFacetIntervals().getIntervals().isEmpty()) {
Optional<Interval> found = searchQuery.getFacetIntervals().getIntervals().stream().filter(interval -> facet.getKey().equals(interval.getLabel() != null ? interval.getLabel() : interval.getField())).findFirst();
if (found.isPresent()) {
if (found.get().getSets() != null) {
Optional<IntervalSet> foundSet = found.get().getSets().stream().filter(aSet -> buck.getFirst().equals(aSet.getLabel())).findFirst();
if (foundSet.isPresent()) {
filterQuery = found.get().getField() + ":" + foundSet.get().toAFTSQuery();
bucketInfo.put(GenericFacetResponse.START, foundSet.get().getStart());
bucketInfo.put(GenericFacetResponse.END, foundSet.get().getEnd());
bucketInfo.put(GenericFacetResponse.START_INC, String.valueOf(foundSet.get().isStartInclusive()));
bucketInfo.put(GenericFacetResponse.END_INC, String.valueOf(foundSet.get().isEndInclusive()));
}
}
}
}
GenericBucket bucket = new GenericBucket(buck.getFirst(), filterQuery, null, new HashSet<Metric>(Arrays.asList(new SimpleMetric(METRIC_TYPE.count, String.valueOf(buck.getSecond())))), null, bucketInfo);
buckets.add(bucket);
}
ffcs.add(new GenericFacetResponse(FACET_TYPE.interval, facet.getKey(), buckets));
}
}
return ffcs;
}
return Collections.emptyList();
}
Aggregations