use of org.alfresco.service.cmr.search.ResultSet in project alfresco-remote-api by Alfresco.
the class ResultMapperTests method testRange.
@Test
public void testRange() throws Exception {
ResultSet results = mockResultset(Collections.emptyList(), Collections.emptyList());
SearchQuery searchQuery = helper.searchQueryFromJson();
SearchRequestContext searchRequest = SearchRequestContext.from(searchQuery);
SearchParameters searchParams = searchMapper.toSearchParameters(EMPTY_PARAMS, searchQuery, searchRequest);
SearchContext searchContext = mapper.toSearchContext((SolrJSONResultSet) results, searchRequest, searchQuery, 0);
// Numeric facet range
List<GenericFacetResponse> rangeFacets = searchContext.getFacets().stream().filter(f -> f.getType().equals(FACET_TYPE.range)).collect(Collectors.toList());
assertEquals(2, rangeFacets.size());
assertEquals(4, rangeFacets.get(0).getBuckets().size());
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());
Object[] metrics1 = rangeFacets.get(0).getBuckets().get(0).getMetrics().toArray();
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(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("content.size", rangeFacets.get(1).getLabel());
assertEquals("[0 - 100)", rangeFacets.get(1).getBuckets().get(0).getLabel());
Object[] metrics = rangeFacets.get(1).getBuckets().get(0).getMetrics().toArray();
assertEquals("4", ((SimpleMetric) metrics[0]).getValue().get("count"));
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();
assertEquals("0", facetInfo.get("start"));
assertEquals("100", facetInfo.get("end"));
assertEquals("[100 - 200)", rangeFacets.get(1).getBuckets().get(1).getLabel());
metrics = rangeFacets.get(1).getBuckets().get(1).getMetrics().toArray();
assertEquals("6", ((SimpleMetric) metrics[0]).getValue().get("count"));
facetInfo = rangeFacets.get(1).getBuckets().get(1).getBucketInfo();
assertEquals("100", facetInfo.get("start"));
assertEquals("200", facetInfo.get("end"));
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());
metrics = rangeFacets.get(1).getBuckets().get(2).getMetrics().toArray();
assertEquals("3", ((SimpleMetric) metrics[0]).getValue().get("count"));
facetInfo = rangeFacets.get(1).getBuckets().get(2).getBucketInfo();
assertEquals("200", facetInfo.get("start"));
assertEquals("300", facetInfo.get("end"));
assertEquals("content.size:[\"200\" TO \"300\">", rangeFacets.get(1).getBuckets().get(2).getFilterQuery());
}
use of org.alfresco.service.cmr.search.ResultSet in project alfresco-remote-api by Alfresco.
the class ResultMapperTests method testFacetingGroupResponse.
@Test
public /**
* Test facet group with out facet fields
* @throws Exception
*/
void testFacetingGroupResponse() throws Exception {
String jsonQuery = "{\"query\": {\"query\": \"alfresco\"}," + "\"facetQueries\": [" + "{\"query\": \"content.size:[o TO 102400]\", \"label\": \"small\",\"group\":\"foo\"}," + "{\"query\": \"content.size:[102400 TO 1048576]\", \"label\": \"medium\",\"group\":\"foo\"}," + "{\"query\": \"content.size:[1048576 TO 16777216]\", \"label\": \"large\",\"group\":\"foo\"}]" + "}";
String expectedResponse = "{\"responseHeader\":{\"status\":0,\"QTime\":9},\"_original_parameters_\":\"org.apache.solr.common.params.DefaultSolrParams:{params(df=TEXT&alternativeDic=DEFAULT_DICTIONARY&fl=DBID,score&start=0&fq={!afts}AUTHORITY_FILTER_FROM_JSON&fq={!afts}TENANT_FILTER_FROM_JSON&rows=1000&locale=en_US&wt=json),defaults(carrot.url=id&spellcheck.collateExtendedResults=true&carrot.produceSummary=true&spellcheck.maxCollations=3&spellcheck.maxCollationTries=5&spellcheck.alternativeTermCount=2&spellcheck.extendedResults=false&defType=afts&spellcheck.maxResultsForSuggest=5&spellcheck=false&carrot.outputSubClusters=false&spellcheck.count=5&carrot.title=mltext@m___t@{http://www.alfresco.org/model/content/1.0}title&carrot.snippet=content@s___t@{http://www.alfresco.org/model/content/1.0}content&spellcheck.collate=true)}\",\"_field_mappings_\":{},\"_date_mappings_\":{},\"_range_mappings_\":{},\"_pivot_mappings_\":{},\"_interval_mappings_\":{},\"_stats_field_mappings_\":{},\"_stats_facet_mappings_\":{},\"_facet_function_mappings_\":{},\"response\":{\"numFound\":6,\"start\":0,\"maxScore\":0.7849362,\"docs\":[{\"DBID\":565,\"score\":0.7849362},{\"DBID\":566,\"score\":0.7849362},{\"DBID\":521,\"score\":0.3540957},{\"DBID\":514,\"score\":0.33025497},{\"DBID\":420,\"score\":0.32440513},{\"DBID\":415,\"score\":0.2780319}]}," + "\"spellcheck\":{\"searchInsteadFor\":\"alfresco\"}," + "\"facet_counts\":{\"facet_queries\": {\"small\": 52,\"large\": 0,\"medium\": 0}}," + "\"processedDenies\":true, \"lastIndexedTx\":34}";
ResultSet results = mockResultset(expectedResponse);
SearchQuery searchQuery = helper.extractFromJson(jsonQuery);
SearchRequestContext searchRequest = SearchRequestContext.from(searchQuery);
SearchContext searchContext = mapper.toSearchContext((SolrJSONResultSet) results, searchRequest, searchQuery, 0);
assertEquals(34l, searchContext.getConsistency().getlastTxId());
assertEquals(null, searchContext.getFacetQueries());
assertEquals(1, searchContext.getFacets().size());
assertEquals(3, searchContext.getFacets().get(0).getBuckets().size());
assertEquals("small", searchContext.getFacets().get(0).getBuckets().get(0).getLabel());
assertEquals("content.size:[o TO 102400]", searchContext.getFacets().get(0).getBuckets().get(0).getFilterQuery());
assertFalse(searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().isEmpty());
Metric[] metrics = searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().toArray(new Metric[searchContext.getFacets().get(0).getBuckets().get(0).getMetrics().size()]);
assertEquals(METRIC_TYPE.count, metrics[0].getType());
assertEquals("{count=52}", metrics[0].getValue().toString());
}
use of org.alfresco.service.cmr.search.ResultSet in project alfresco-remote-api by Alfresco.
the class PatchThumbnailsAsRenditionsGet method executeImpl.
@Override
public Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) {
if (logger.isInfoEnabled()) {
logger.debug("Patching legacy thumbnails by applying appropriate rendition aspect");
}
List<NodeRef> resultNodeRefs = null;
ResultSet types = null;
try {
types = searchService.query(SPACES_STORE, SearchService.LANGUAGE_LUCENE, QUERY);
resultNodeRefs = types.getNodeRefs();
} finally {
if (types != null) {
types.close();
}
}
long patchedNodeRefs = 0;
for (NodeRef nodeRef : resultNodeRefs) {
if (nodeService.exists(nodeRef) == false || renditionService.isRendition(nodeRef)) {
continue;
}
// Now add one of the two aspects depending on parent location.
ChildAssociationRef sourceNode = renditionService.getSourceNode(nodeRef);
ChildAssociationRef primaryParent = nodeService.getPrimaryParent(nodeRef);
QName aspectToApply;
if (primaryParent.getParentRef().equals(sourceNode.getParentRef())) {
aspectToApply = RenditionModel.ASPECT_HIDDEN_RENDITION;
} else {
aspectToApply = RenditionModel.ASPECT_VISIBLE_RENDITION;
}
if (logger.isDebugEnabled()) {
StringBuilder msg = new StringBuilder();
msg.append("Applying aspect ").append(aspectToApply).append(" to node ").append(nodeRef);
logger.debug(msg.toString());
}
nodeService.addAspect(nodeRef, aspectToApply, null);
patchedNodeRefs++;
}
Map<String, Object> model = new HashMap<String, Object>();
model.put("patchedNodeCount", new Long(patchedNodeRefs));
return model;
}
use of org.alfresco.service.cmr.search.ResultSet in project alfresco-remote-api by Alfresco.
the class KeywordSearch method search.
/**
* Execute the search
*/
private SearchResult search(String searchTerms, int startPage, int itemsPerPage, Locale locale, WebScriptRequest req) {
SearchResult searchResult = null;
ResultSet results = null;
try {
// construct search statement
String[] terms = searchTerms.split(" ");
searchTerms = searchTerms.replaceAll("\"", """);
// Escape special characters in the terms, so that they can't confuse the parser
for (int i = 0; i < terms.length; i++) {
terms[i] = SearchLanguageConversion.escapeLuceneQuery(terms[i]);
}
Map<String, Object> statementModel = new HashMap<String, Object>(7, 1.0f);
statementModel.put("args", createArgs(req));
statementModel.put("terms", terms);
Writer queryWriter = new StringWriter(1024);
renderFormatTemplate(QUERY_FORMAT, statementModel, queryWriter);
String query = queryWriter.toString();
// execute query
if (logger.isDebugEnabled()) {
logger.debug("Search parameters: searchTerms=" + searchTerms + ", startPage=" + startPage + ", itemsPerPage=" + itemsPerPage + ", search locale=" + locale.toString());
logger.debug("Issuing lucene search: " + query);
}
SearchParameters parameters = new SearchParameters();
parameters.addStore(SEARCH_STORE);
parameters.setLanguage(SearchService.LANGUAGE_LUCENE);
parameters.setQuery(query);
if (locale != null) {
parameters.addLocale(locale);
}
results = searchService.query(parameters);
int totalResults = results.length();
if (logger.isDebugEnabled())
logger.debug("Results: " + totalResults + " rows (limited: " + results.getResultSetMetaData().getLimitedBy() + ")");
// are we out-of-range
int totalPages = (totalResults / itemsPerPage);
totalPages += (totalResults % itemsPerPage != 0) ? 1 : 0;
if (totalPages != 0 && (startPage < 1 || startPage > totalPages)) {
throw new WebScriptException("Start page " + startPage + " is outside boundary of " + totalPages + " pages");
}
// construct search result
searchResult = new SearchResult();
searchResult.setSearchTerms(searchTerms);
searchResult.setLocale(locale);
searchResult.setItemsPerPage(itemsPerPage);
searchResult.setStartPage(startPage);
searchResult.setTotalResults(totalResults);
if (totalResults == 0) {
searchResult.setTotalPages(0);
searchResult.setStartIndex(0);
searchResult.setTotalPageItems(0);
} else {
searchResult.setTotalPages(totalPages);
searchResult.setStartIndex(((startPage - 1) * itemsPerPage) + 1);
searchResult.setTotalPageItems(Math.min(itemsPerPage, totalResults - searchResult.getStartIndex() + 1));
}
SearchTemplateNode[] nodes = new SearchTemplateNode[searchResult.getTotalPageItems()];
for (int i = 0; i < searchResult.getTotalPageItems(); i++) {
NodeRef node = results.getNodeRef(i + searchResult.getStartIndex() - 1);
// Make the search resilient to invalid nodes
if (!nodeService.exists(node)) {
continue;
}
float score = results.getScore(i + searchResult.getStartIndex() - 1);
nodes[i] = new SearchTemplateNode(node, score);
}
searchResult.setResults(nodes);
return searchResult;
} finally {
if (results != null) {
results.close();
}
}
}
use of org.alfresco.service.cmr.search.ResultSet in project alfresco-remote-api by Alfresco.
the class ForumTopicsFilteredGet method doSearch.
/**
* Do the actual search
*
* @param searchQuery Pair with query string in first and query language in second
* @param sortAscending boolean
* @param paging PagingRequest
*/
protected PagingResults<TopicInfo> doSearch(Pair<String, String> searchQuery, boolean sortAscending, PagingRequest paging) {
ResultSet resultSet = null;
PagingResults<TopicInfo> pagedResults = new EmptyPagingResults<TopicInfo>();
String sortOn = "@{http://www.alfresco.org/model/content/1.0}created";
// Setup the search parameters
SearchParameters sp = new SearchParameters();
sp.addStore(SPACES_STORE);
sp.setQuery(searchQuery.getFirst());
sp.setLanguage(searchQuery.getSecond());
sp.addSort(sortOn, sortAscending);
if (paging.getMaxItems() > 0) {
// Multiply maxItems by 10. This is to catch topics that have multiple replies and ensure that the maximum number of topics is shown.
sp.setLimit(paging.getMaxItems() * 10);
sp.setLimitBy(LimitBy.FINAL_SIZE);
}
if (paging.getSkipCount() > 0) {
sp.setSkipCount(paging.getSkipCount());
}
try {
resultSet = searchService.query(sp);
pagedResults = wrap(resultSet, paging);
} finally {
try {
resultSet.close();
} catch (Exception e) {
// do nothing
}
}
return pagedResults;
}
Aggregations