use of org.alfresco.rest.api.search.model.FacetQuery in project alfresco-remote-api by Alfresco.
the class SearchMapperTests method fromFacetQuery.
@Test
public void fromFacetQuery() throws Exception {
SearchParameters searchParameters = new SearchParameters();
// Doesn't error
searchMapper.fromFacetQuery(searchParameters, null);
searchMapper.fromFacetQuery(searchParameters, Arrays.asList(new FacetQuery("ping", null, null), new FacetQuery("pong", "table", null)));
assertEquals(2, searchParameters.getFacetQueries().size());
assertEquals("{!afts key='ping'}ping", searchParameters.getFacetQueries().get(0));
assertEquals("{!afts key='table'}pong", searchParameters.getFacetQueries().get(1));
try {
searchMapper.fromFacetQuery(searchParameters, Arrays.asList(new FacetQuery("ping", null, null), new FacetQuery("{!afts}pang", "tennis", null)));
fail();
} catch (InvalidArgumentException iae) {
// Cannot start with afts
assertNotNull(iae);
}
}
use of org.alfresco.rest.api.search.model.FacetQuery in project alfresco-remote-api by Alfresco.
the class SearchMapper method fromFacetQuery.
/**
** SearchParameters from List<FacetQuery>
* @param sp
* @param facetQueries
*/
public void fromFacetQuery(SearchParameters sp, List<FacetQuery> facetQueries) {
if (facetQueries != null && !facetQueries.isEmpty()) {
for (FacetQuery fq : facetQueries) {
ParameterCheck.mandatoryString("facetQuery query", fq.getQuery());
String query = fq.getQuery();
String label = fq.getLabel() != null ? fq.getLabel() : query;
if (query.startsWith("{!afts")) {
throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, new Object[] { ": Facet queries should not start with !afts" });
}
query = "{!afts key='" + label + "'}" + query;
sp.addFacetQuery(query);
}
}
}
use of org.alfresco.rest.api.search.model.FacetQuery in project alfresco-remote-api by Alfresco.
the class ResultMapper method toSearchContext.
/**
* Uses the results from Solr to set the Search Context
* @param SolrJSONResultSet
* @param searchQuery
* @return SearchContext
*/
public SearchContext toSearchContext(SolrJSONResultSet solrResultSet, SearchRequestContext searchRequestContext, SearchQuery searchQuery, int notFound) {
SearchContext context = null;
Map<String, Integer> facetQueries = solrResultSet.getFacetQueries();
List<GenericFacetResponse> facets = new ArrayList<>();
List<FacetQueryContext> facetResults = null;
SpellCheckContext spellCheckContext = null;
List<FacetFieldContext> ffcs = new ArrayList<FacetFieldContext>();
if (searchQuery == null) {
throw new IllegalArgumentException("searchQuery can't be null");
}
// Facet queries
if (facetQueries != null && !facetQueries.isEmpty()) {
// If group by field populated in query facet return bucketing into facet field.
List<GenericFacetResponse> facetQueryForFields = getFacetBucketsFromFacetQueries(facetQueries, searchQuery);
if (hasGroup(searchQuery) || FacetFormat.V2 == searchQuery.getFacetFormat()) {
facets.addAll(facetQueryForFields);
} else {
// Return the old way facet query with no bucketing.
facetResults = new ArrayList<>(facetQueries.size());
for (Entry<String, Integer> fq : facetQueries.entrySet()) {
String filterQuery = null;
if (searchQuery.getFacetQueries() != null) {
Optional<FacetQuery> found = searchQuery.getFacetQueries().stream().filter(facetQuery -> fq.getKey().equals(facetQuery.getLabel())).findFirst();
filterQuery = found.isPresent() ? found.get().getQuery() : fq.getKey();
}
facetResults.add(new FacetQueryContext(fq.getKey(), filterQuery, fq.getValue()));
}
}
}
// Field Facets
Map<String, List<Pair<String, Integer>>> facetFields = solrResultSet.getFieldFacets();
if (FacetFormat.V2 == searchQuery.getFacetFormat()) {
facets.addAll(getFacetBucketsForFacetFieldsAsFacets(facetFields, searchQuery));
} else {
ffcs.addAll(getFacetBucketsForFacetFields(facetFields, searchQuery));
}
Map<String, List<Pair<String, Integer>>> facetInterval = solrResultSet.getFacetIntervals();
facets.addAll(getGenericFacetsForIntervals(facetInterval, searchQuery));
Map<String, List<Map<String, String>>> facetRanges = solrResultSet.getFacetRanges();
facets.addAll(RangeResultMapper.getGenericFacetsForRanges(facetRanges, searchQuery.getFacetRanges()));
List<GenericFacetResponse> stats = getFieldStats(searchRequestContext, solrResultSet.getStats());
List<GenericFacetResponse> pimped = getPivots(searchRequestContext, solrResultSet.getPivotFacets(), stats);
facets.addAll(pimped);
facets.addAll(stats);
// Spelling
SpellCheckResult spell = solrResultSet.getSpellCheckResult();
if (spell != null && spell.getResultName() != null && !spell.getResults().isEmpty()) {
spellCheckContext = new SpellCheckContext(spell.getResultName(), spell.getResults());
}
// Put it all together
context = new SearchContext(solrResultSet.getLastIndexedTxId(), facets, facetResults, ffcs, spellCheckContext, searchRequestContext.includeRequest() ? searchQuery : null);
return isNullContext(context) ? null : context;
}
use of org.alfresco.rest.api.search.model.FacetQuery in project alfresco-remote-api by Alfresco.
the class ResultMapper method getFacetBucketsFromFacetQueries.
/**
* Builds a facet field from facet queries.
* @param facetQueries
* @return
*/
protected List<GenericFacetResponse> getFacetBucketsFromFacetQueries(Map<String, Integer> facetQueries, SearchQuery searchQuery) {
List<GenericFacetResponse> facetResults = new ArrayList<GenericFacetResponse>();
Map<String, List<GenericBucket>> groups = new HashMap<>();
for (Entry<String, Integer> fq : facetQueries.entrySet()) {
String group = null;
String filterQuery = null;
if (searchQuery != null && searchQuery.getFacetQueries() != null) {
Optional<FacetQuery> found = searchQuery.getFacetQueries().stream().filter(facetQuery -> fq.getKey().equals(facetQuery.getLabel())).findFirst();
filterQuery = found.isPresent() ? found.get().getQuery() : fq.getKey();
if (found.isPresent() && found.get().getGroup() != null) {
group = found.get().getGroup();
}
}
// {
if (groups.containsKey(group)) {
Set<Metric> metrics = new HashSet<>(1);
metrics.add(new SimpleMetric(METRIC_TYPE.count, fq.getValue()));
groups.get(group).add(new GenericBucket(fq.getKey(), filterQuery, null, metrics, null));
} else {
List<GenericBucket> l = new ArrayList<GenericBucket>();
Set<Metric> metrics = new HashSet<>(1);
metrics.add(new SimpleMetric(METRIC_TYPE.count, fq.getValue()));
l.add(new GenericBucket(fq.getKey(), filterQuery, null, metrics, null));
groups.put(group, l);
}
}
// }
if (!groups.isEmpty()) {
groups.forEach((a, v) -> facetResults.add(new GenericFacetResponse(FACET_TYPE.query, a, v)));
}
return facetResults;
}
Aggregations