Java Code Examples for org.alfresco.service.cmr.search.SearchParameters#addStore()
The following examples show how to use
org.alfresco.service.cmr.search.SearchParameters#addStore() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: SearchServiceTest.java From alfresco-repository with GNU Lesser General Public License v3.0 | 6 votes |
public void testHybridDisabledByDefault() { try { authenticationComponent.setCurrentUser(AuthenticationUtil.getAdminUserName()); SearchParameters sp = new SearchParameters(); sp.setQueryConsistency(QueryConsistency.HYBRID); sp.setLanguage(SearchService.LANGUAGE_CMIS_ALFRESCO); sp.setQuery("select * from cmis:document where cmis:name like '%alfresco%'"); sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); pubSearchService.query(sp); fail("Hybrid search should be disabled."); } catch (DisabledFeatureException e) { // Got here, good. } }
Example 2
Source File: BasicConstraint.java From alfresco-repository with GNU Lesser General Public License v3.0 | 6 votes |
@Override public SearchParameters apply(ActualEnvironment environment, VirtualQuery query) throws VirtualizationException { SearchParameters searchParameters = new SearchParameters(); String storeRefString = query.getStoreRef(); if (storeRefString != null) { searchParameters.addStore(new StoreRef(storeRefString)); } else { searchParameters.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); } searchParameters.setLanguage(query.getLanguage()); searchParameters.setQuery(query.getQueryString()); searchParameters.setQueryConsistency(QueryConsistency.TRANSACTIONAL_IF_POSSIBLE); return searchParameters; }
Example 3
Source File: TaggingServiceImpl.java From alfresco-repository with GNU Lesser General Public License v3.0 | 6 votes |
/** * @see org.alfresco.service.cmr.tagging.TaggingService#findTaggedNodesAndCountByTagName(StoreRef) */ @Override public List<Pair<String, Integer>> findTaggedNodesAndCountByTagName(StoreRef storeRef) { String queryTaggeble = "ASPECT:\"" + ContentModel.ASPECT_TAGGABLE + "\"" + "-ASPECT:\"" + ContentModel.ASPECT_WORKING_COPY + "\""; SearchParameters sp = new SearchParameters(); sp.setQuery(queryTaggeble); sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.addStore(storeRef); sp.addFieldFacet(new FieldFacet("TAG")); ResultSet resultSet = null; try { // Do the search for nodes resultSet = this.searchService.query(sp); return resultSet.getFieldFacet("TAG"); } finally { if (resultSet != null) { resultSet.close(); } } }
Example 4
Source File: SearchServiceTest.java From alfresco-repository with GNU Lesser General Public License v3.0 | 5 votes |
public void testAndyCMIS() { authenticationComponent.setCurrentUser("andy"); SearchParameters sp = new SearchParameters(); sp.setLanguage(SearchService.LANGUAGE_CMIS_ALFRESCO); sp.setQuery("select * from cmis:folder"); sp.addStore(rootNodeRef.getStoreRef()); ResultSet results = pubSearchService.query(sp); assertEquals(results.length(), 5); assertNotNull(results.getResultSetMetaData()); assertEquals(results.getResultSetMetaData().getLimitedBy(), LimitBy.UNLIMITED); assertEquals(results.getResultSetMetaData().getPermissionEvaluationMode(), PermissionEvaluationMode.EAGER); results.close(); }
Example 5
Source File: DBQueryTest.java From alfresco-repository with GNU Lesser General Public License v3.0 | 5 votes |
public void queryWithCount(String ql, String query, int count, QName property, Boolean ascending) { SearchParameters sp = new SearchParameters(); sp.setLanguage(ql); sp.setQueryConsistency(QueryConsistency.TRANSACTIONAL); sp.setQuery(query); sp.addStore(rootNodeRef.getStoreRef()); ResultSet results = serviceRegistry.getSearchService().query(sp); HashSet<NodeRef> found = new HashSet<NodeRef>(); Comparable last = null; for(ResultSetRow row :results) { assertFalse(found.contains( row.getNodeRef())); found.add(row.getNodeRef()); if(property != null) { Comparable current = (Comparable)nodeService.getProperty(row.getNodeRef(), property); if(last != null) { if((ascending == null) || (ascending)) { assert(last.compareTo(current) >= 0); } else { assert(last.compareTo(current) <= 0); } } last = current; } } assertEquals(count, results.length()); results.getResultSetMetaData(); results.close(); }
Example 6
Source File: VirtualQueryImpl.java From alfresco-repository with GNU Lesser General Public License v3.0 | 5 votes |
private SearchParameters createSearchParameters(boolean files, boolean folders, PagingRequest pagingRequest) throws VirtualizationException { SearchParameters searchParameters = new SearchParameters(); if (store != null) { searchParameters.addStore(new StoreRef(store)); } else { searchParameters.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); } searchParameters.setLanguage(language); searchParameters.setQuery(filter(language, query, files, folders)); searchParameters.setQueryConsistency(QueryConsistency.TRANSACTIONAL_IF_POSSIBLE); if (pagingRequest != null) { searchParameters.setSkipCount(pagingRequest.getSkipCount()); searchParameters.setMaxItems(pagingRequest.getMaxItems()); } return searchParameters; }
Example 7
Source File: SearchSQLApiWebscript.java From alfresco-remote-api with GNU Lesser General Public License v3.0 | 5 votes |
public SearchParameters buildSearchParameters(SearchSQLQuery searchQuery) { SearchParameters sparams = new SearchParameters(); sparams.setLanguage(SearchService.LANGUAGE_SOLR_SQL); sparams.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); if(StringUtils.isEmpty(searchQuery.getStmt())) { throw new AlfrescoRuntimeException("Required stmt parameter is missing."); } if(searchQuery.getFormat().equalsIgnoreCase("solr")) { sparams.addExtraParameter("format", "solr"); } if(!StringUtils.isEmpty(searchQuery.getTimezone())) { sparams.setTimezone(searchQuery.getTimezone()); } sparams.setQuery(searchQuery.getStmt()); searchQuery.getLocales().forEach(action->{ Locale locale = new Locale(action); sparams.addLocale(locale); }); searchQuery.getFilterQueries().forEach(sparams::addFilterQuery); sparams.setIncludeMetadata(searchQuery.isIncludeMetadata()); return sparams; }
Example 8
Source File: HiddenAspect.java From alfresco-repository with GNU Lesser General Public License v3.0 | 5 votes |
private ResultSet searchForName(StoreRef storeRef, String name) { SearchParameters sp = new SearchParameters(); sp.addStore(storeRef); sp.setLanguage("lucene"); sp.setQuery("@" + SearchLanguageConversion.escapeLuceneQuery(ContentModel.PROP_NAME.toString()) + ":\"" + name + "\""); sp.addLocale(new Locale("en")); return searchService.query(sp); }
Example 9
Source File: SearchMapper.java From alfresco-remote-api with GNU Lesser General Public License v3.0 | 5 votes |
/** * SearchParameters from Scope object * @param Scope scope * @param sp SearchParameters * @param searchRequestContext */ public void fromScope(SearchParameters sp, Scope scope, SearchRequestContext searchRequestContext) { if (scope != null) { List<String> stores = scope.getLocations(); if (stores!= null && !stores.isEmpty()) { //First reset the stores then add them. sp.getStores().clear(); searchRequestContext.getStores().addAll(stores); for (String aStore:stores) { try { sp.addStore(storeMapper.getStoreRef(aStore)); } catch (AlfrescoRuntimeException are) { throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, new Object[] { aStore }); } } if (stores.contains(StoreMapper.HISTORY) && (stores.size() > 1)) { throw new InvalidArgumentException(InvalidArgumentException.DEFAULT_MESSAGE_ID, new Object[] { ": scope 'history' can only be used on its own" }); } } } }
Example 10
Source File: SolrSearchService.java From alfresco-repository with GNU Lesser General Public License v3.0 | 4 votes |
@Override public boolean contains(NodeRef nodeRef, QName propertyQName, String googleLikePattern, Operator defaultOperator) throws InvalidNodeRefException { ResultSet resultSet = null; try { // build Lucene search string specific to the node StringBuilder sb = new StringBuilder(); sb.append("+ID:\"").append(nodeRef.toString()).append("\" +(TEXT:(").append(googleLikePattern.toLowerCase()).append(") "); if (propertyQName != null) { sb.append(" OR @").append(SearchLanguageConversion.escapeLuceneQuery(QName.createQName(propertyQName.getNamespaceURI(), ISO9075.encode(propertyQName.getLocalName())).toString())); sb.append(":(").append(googleLikePattern.toLowerCase()).append(")"); } else { for (QName key : nodeService.getProperties(nodeRef).keySet()) { sb.append(" OR @").append(SearchLanguageConversion.escapeLuceneQuery(QName.createQName(key.getNamespaceURI(), ISO9075.encode(key.getLocalName())).toString())); sb.append(":(").append(googleLikePattern.toLowerCase()).append(")"); } } sb.append(")"); SearchParameters sp = new SearchParameters(); sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.setQuery(sb.toString()); sp.setDefaultOperator(defaultOperator); sp.addStore(nodeRef.getStoreRef()); resultSet = this.query(sp); boolean answer = resultSet.length() > 0; return answer; } finally { if (resultSet != null) { resultSet.close(); } } }
Example 11
Source File: CMISQueryOptions.java From alfresco-data-model with GNU Lesser General Public License v3.0 | 4 votes |
/** * @return SearchParameters */ public SearchParameters getAsSearchParmeters() { SearchParameters searchParameters = new SearchParameters(); searchParameters.setDefaultFieldName(this.getDefaultFieldName()); searchParameters.setDefaultFTSFieldConnective(this.getDefaultFTSFieldConnective() == Connective.OR ? SearchParameters.Operator.OR : SearchParameters.Operator.AND); searchParameters.setDefaultFTSOperator(this.getDefaultFTSConnective() == Connective.OR ? SearchParameters.Operator.OR : SearchParameters.Operator.AND); searchParameters.setDefaultOperator(this.getDefaultFTSConnective() == Connective.OR ? SearchParameters.Operator.OR : SearchParameters.Operator.AND); searchParameters.setLanguage(SearchService.LANGUAGE_CMIS_ALFRESCO); if(this.getMaxItems() > 0) { searchParameters.setLimit(this.getMaxItems()); searchParameters.setLimitBy(LimitBy.FINAL_SIZE); searchParameters.setMaxItems(this.getMaxItems()); } searchParameters.setMaxPermissionChecks(this.getMaxPermissionChecks()); searchParameters.setMaxPermissionCheckTimeMillis(this.getMaxPermissionCheckTimeMillis()); searchParameters.setMlAnalaysisMode(this.getMlAnalaysisMode()); //searchParameters.setNamespace() TODO: Fix //searchParameters.setPermissionEvaluation() searchParameters.setQuery(this.getQuery()); searchParameters.setSkipCount(this.getSkipCount()); //searchParameters.addAllAttribute() for(Locale locale : this.getLocales()) { searchParameters.addLocale(locale); } for(QueryParameterDefinition queryParameterDefinition: this.getQueryParameterDefinitions()) { searchParameters.addQueryParameterDefinition(queryParameterDefinition); } //searchParameters.addQueryTemplate(name, template) //searchParameters.addSort() for(StoreRef storeRef : this.getStores()) { searchParameters.addStore(storeRef); } //searchParameters.addTextAttribute() searchParameters.setBulkFetchEnabled(isBulkFetchEnabled()); searchParameters.setQueryConsistency(this.getQueryConsistency()); searchParameters.setSinceTxId(getSinceTxId()); for(String name : getQueryTemplates().keySet()) { String template = getQueryTemplates().get(name); searchParameters.addQueryTemplate(name, template); } return searchParameters; }
Example 12
Source File: LuceneCategoryServiceImpl.java From alfresco-repository with GNU Lesser General Public License v3.0 | 4 votes |
private Collection<ChildAssociationRef> getChildren(NodeRef categoryRef, Mode mode, Depth depth, boolean sortByName, String filter, int fetchSize) { if (categoryRef == null) { return Collections.<ChildAssociationRef> emptyList(); } categoryRef = tenantService.getBaseName(categoryRef); // for solr ResultSet resultSet = null; try { StringBuilder luceneQuery = new StringBuilder(64); switch (mode) { case ALL: luceneQuery.append("PATH:\""); luceneQuery.append(buildXPath(nodeService.getPath(categoryRef))).append("/"); if (depth.equals(Depth.ANY)) { luceneQuery.append("/"); } luceneQuery.append("*").append("\" "); break; case MEMBERS: luceneQuery.append("PATH:\""); luceneQuery.append(buildXPath(nodeService.getPath(categoryRef))).append("/"); if (depth.equals(Depth.ANY)) { luceneQuery.append("/"); } luceneQuery.append("member").append("\" "); break; case SUB_CATEGORIES: luceneQuery.append("+PATH:\""); luceneQuery.append(buildXPath(nodeService.getPath(categoryRef))).append("/"); if (depth.equals(Depth.ANY)) { luceneQuery.append("/"); } luceneQuery.append("*").append("\" "); luceneQuery.append("+TYPE:\"" + ContentModel.TYPE_CATEGORY.toString() + "\""); break; } if (filter != null) { luceneQuery.append(" " + "+@cm\\:name:\"*" + filter + "*\""); } // Get a searcher that will include Categories added in this transaction SearchService searcher = indexerAndSearcher.getSearcher(categoryRef.getStoreRef(), true); // Perform the search SearchParameters searchParameters = new SearchParameters(); resultSet = searcher.query(categoryRef.getStoreRef(), "lucene", luceneQuery.toString(), null); searchParameters.setLanguage("lucene"); if(sortByName) { searchParameters.addSort("@" + ContentModel.PROP_NAME, true); } searchParameters.setQuery(luceneQuery.toString()); searchParameters.setLimit(-1); searchParameters.setMaxItems(fetchSize); searchParameters.setLimitBy(LimitBy.FINAL_SIZE); searchParameters.addStore(categoryRef.getStoreRef()); resultSet = searcher.query(searchParameters); // Convert from search results to the required Child Assocs return resultSetToChildAssocCollection(resultSet); } finally { if (resultSet != null) { resultSet.close(); } } }
Example 13
Source File: SearchMapper.java From alfresco-remote-api with GNU Lesser General Public License v3.0 | 4 votes |
/** * Sets the API defaults * @param sp */ public void setDefaults(SearchParameters sp) { //Hardcode workspace store sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); }
Example 14
Source File: QuickShareLinksImpl.java From alfresco-remote-api with GNU Lesser General Public License v3.0 | 4 votes |
public CollectionWithPagingInfo<QuickShareLink> findLinks(Parameters parameters) { checkEnabled(); String queryString = "ASPECT:\"" + QuickShareModel.ASPECT_QSHARE.toString() + "\""; SearchParameters sp = new SearchParameters(); // note: REST API query parameter (ie. where clause filter) - not to be confused with search query ;-) Query q = parameters.getQuery(); if (q != null) { // filtering via "where" clause MapBasedQueryWalker propertyWalker = new MapBasedQueryWalker(FIND_SHARED_LINKS_QUERY_PROPERTIES, null); QueryHelper.walk(q, propertyWalker); String sharedByUserId = propertyWalker.getProperty(PARAM_SHAREDBY, WhereClauseParser.EQUALS, String.class); if (sharedByUserId != null) { if (People.DEFAULT_USER.equalsIgnoreCase(sharedByUserId)) { sharedByUserId = AuthenticationUtil.getFullyAuthenticatedUser(); } QueryParameterDefinition qpd = new QueryParameterDefImpl(QuickShareModel.PROP_QSHARE_SHAREDBY, dictionaryService.getDataType(DataTypeDefinition.TEXT), true, sharedByUserId); sp.addQueryParameterDefinition(qpd); String qsharedBy = QuickShareModel.PROP_QSHARE_SHAREDBY.toPrefixString(namespaceService); queryString += " +@"+SearchLanguageConversion.escapeLuceneQuery(qsharedBy)+":\"${"+qsharedBy+"}\""; } } sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.setQuery(queryString); sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); Paging paging = parameters.getPaging(); PagingRequest pagingRequest = Util.getPagingRequest(paging); sp.setSkipCount(pagingRequest.getSkipCount()); sp.setMaxItems(pagingRequest.getMaxItems()); sp.addSort("@" + ContentModel.PROP_MODIFIED, false); ResultSet results = searchService.query(sp); List<QuickShareLink> qsLinks = new ArrayList<>(results.length()); List<String> includeParam = parameters.getInclude(); for (ResultSetRow row : results) { NodeRef nodeRef = row.getNodeRef(); qsLinks.add(getQuickShareInfo(nodeRef, false, includeParam)); } results.close(); return CollectionWithPagingInfo.asPaged(paging, qsLinks, results.hasMore(), Long.valueOf(results.getNumberFound()).intValue()); }
Example 15
Source File: QuickShareServiceImpl.java From alfresco-repository with GNU Lesser General Public License v3.0 | 4 votes |
@Override public Pair<String, NodeRef> getTenantNodeRefFromSharedId(final String sharedId) { NodeRef nodeRef = TenantUtil.runAsDefaultTenant(new TenantRunAsWork<NodeRef>() { public NodeRef doWork() throws Exception { return (NodeRef) attributeService.getAttribute(ATTR_KEY_SHAREDIDS_ROOT, sharedId); } }); if (nodeRef == null) { /* TODO * Temporary fix for RA-1093 and MNT-16224. The extra lookup should be * removed (the same as before, just throw the 'InvalidSharedIdException' exception) when we * have a system wide patch to remove the 'shared' aspect of the nodes that have been archived while shared. */ // TMDQ final String query = "+TYPE:\"cm:content\" AND +ASPECT:\"qshare:shared\" AND =qshare:sharedId:\"" + sharedId + "\""; SearchParameters sp = new SearchParameters(); sp.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO); sp.setQuery(query); sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); List<NodeRef> nodeRefs = null; ResultSet results = null; try { results = searchService.query(sp); nodeRefs = results.getNodeRefs(); } catch (Exception ex) { throw new InvalidSharedIdException(sharedId); } finally { if (results != null) { results.close(); } } if (nodeRefs.size() != 1) { throw new InvalidSharedIdException(sharedId); } nodeRef = tenantService.getName(nodeRefs.get(0)); } // note: relies on tenant-specific (ie. mangled) nodeRef String tenantDomain = tenantService.getDomain(nodeRef.getStoreRef().getIdentifier()); return new Pair<>(tenantDomain, tenantService.getBaseName(nodeRef)); }
Example 16
Source File: CronScheduledQueryBasedTemplateActionDefinition.java From alfresco-repository with GNU Lesser General Public License v3.0 | 4 votes |
@Override public List<NodeRef> getNodes() { LinkedList<NodeRef> nodeRefs = new LinkedList<NodeRef>(); // Build the actual query string String queryTemplate = getQueryTemplate(); // MNT-11598 workaround: de-escape \$\{foo\} or \#\{foo\} if (queryTemplate.contains("\\$\\{") || queryTemplate.contains("\\#\\{")) { queryTemplate = queryTemplate.replace("\\$\\{", "${"); queryTemplate = queryTemplate.replace("\\#\\{", "#{"); if (queryTemplate.contains("\\}")) { queryTemplate = queryTemplate.replace("\\}", "}"); } } String query = templateService.processTemplateString(getTemplateActionModelFactory().getTemplateEngine(), queryTemplate, getTemplateActionModelFactory().getModel()); // Execute the query SearchParameters sp = new SearchParameters(); sp.setLanguage(getQueryLanguage()); sp.setQuery(query); for (String storeRef : getStores()) { sp.addStore(new StoreRef(storeRef)); } // Transform the reults into a node list ResultSet results = null; try { results = searchService.query(sp); for (ResultSetRow row : results) { nodeRefs.add(row.getNodeRef()); } } finally { if (results != null) { results.close(); } } return nodeRefs; }
Example 17
Source File: ForumTopicsFilteredGet.java From alfresco-remote-api with GNU Lesser General Public License v3.0 | 4 votes |
/** * 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; }
Example 18
Source File: QueriesImpl.java From alfresco-remote-api with GNU Lesser General Public License v3.0 | 4 votes |
public CollectionWithPagingInfo<T> find(Parameters parameters, String termName, int minTermLength, String queryTemplateName, Sort sort, Map<String, QName> sortParamsToQNames, SortColumn... defaultSort) { SearchParameters sp = new SearchParameters(); sp.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO); sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); sp.setDefaultFieldName(queryTemplateName); String term = getTerm(parameters, termName, minTermLength); StringBuilder query = new StringBuilder(); buildQuery(query, term, sp, queryTemplateName); sp.setQuery(query.toString()); Paging paging = parameters.getPaging(); PagingRequest pagingRequest = Util.getPagingRequest(paging); List<SortColumn> defaultSortCols = (defaultSort != null ? Arrays.asList(defaultSort) : Collections.emptyList()); if (sort == IN_QUERY_SORT) { addSortOrder(parameters, sortParamsToQNames, defaultSortCols, sp); sp.setSkipCount(pagingRequest.getSkipCount()); sp.setMaxItems(pagingRequest.getMaxItems()); } ResultSet queryResults = null; List<T> collection = null; try { queryResults = searchService.query(sp); List<NodeRef> nodeRefs = queryResults.getNodeRefs(); if (sort == POST_QUERY_SORT) { nodeRefs = postQuerySort(parameters, sortParamsToQNames, defaultSortCols, nodeRefs); } collection = newList(nodeRefs.size()); List<String> includeParam = parameters.getInclude(); for (NodeRef nodeRef : nodeRefs) { T t = convert(nodeRef, includeParam); collection.add(t); } if (sort == POST_QUERY_SORT) { return listPage(collection, paging); } else { return CollectionWithPagingInfo.asPaged(paging, collection, queryResults.hasMore(), Long.valueOf(queryResults.getNumberFound()).intValue()); } } finally { if (queryResults != null) { queryResults.close(); } } }
Example 19
Source File: SiteServiceImpl.java From alfresco-repository with GNU Lesser General Public License v3.0 | 4 votes |
@Override public List<SiteInfo> findSites(String filter, String sitePresetFilter, int size) { List<SiteInfo> result; NodeRef siteRoot = getSiteRoot(); if (siteRoot == null) { result = Collections.emptyList(); } else { // get the sites that match the specified names StringBuilder query = new StringBuilder(128); query.append("+PARENT:\"").append(siteRoot.toString()).append('"'); final boolean filterIsPresent = filter != null && filter.length() > 0; // The filter string is only used in the Lucene query if it restricts results. // A search for name/title/description = "*" does not need to be put into the Lucene query. // This allows users to search for "*" in the site-finder. final boolean filterIsPresentAndNecessary = filterIsPresent && !filter.equals("*"); final boolean sitePresetFilterIsPresent = sitePresetFilter != null && sitePresetFilter.length() > 0; if (filterIsPresentAndNecessary || sitePresetFilterIsPresent) { query.append(" +("); if (filterIsPresentAndNecessary) { String escNameFilter = SearchLanguageConversion.escapeLuceneQuery(filter.replace('"', ' ')); query.append(" @cm\\:name:\"*" + escNameFilter + "*\"") .append(" @cm\\:title:\"" + escNameFilter + "\"") .append(" @cm\\:description:\"" + escNameFilter + "\""); } if (sitePresetFilterIsPresent) { String escPresetFilter = SearchLanguageConversion.escapeLuceneQuery(sitePresetFilter.replace('"', ' ')); query.append(" @st\\:sitePreset:\"" + escPresetFilter + "\""); } query.append(")"); } SearchParameters sp = new SearchParameters(); sp.addStore(siteRoot.getStoreRef()); sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.setQuery(query.toString()); if (size > 0) { sp.setLimit(size); sp.setLimitBy(LimitBy.FINAL_SIZE); } ResultSet results = this.searchService.query(sp); try { result = new ArrayList<SiteInfo>(results.length()); for (NodeRef site : results.getNodeRefs()) { // Ignore any node type that is not a "site" QName siteClassName = this.nodeService.getType(site); if (this.dictionaryService.isSubClass(siteClassName, SiteModel.TYPE_SITE)) { result.add(createSiteInfo(site)); } } } finally { results.close(); } } return result; }
Example 20
Source File: PersonServiceImpl.java From alfresco-repository with GNU Lesser General Public License v3.0 | 4 votes |
private List<NodeRef> getPeopleFtsList(String pattern, PagingRequest pagingRequest) throws Throwable { // Think this code is based on org.alfresco.repo.jscript.People.getPeopleImplSearch(String, StringTokenizer, int, int) List<NodeRef> people = null; SearchParameters params = new SearchParameters(); params.addQueryTemplate("_PERSON", "|%firstName OR |%lastName OR |%userName"); params.setDefaultFieldName("_PERSON"); StringBuilder query = new StringBuilder(256); query.append("TYPE:\"").append(ContentModel.TYPE_PERSON).append("\" AND ("); StringTokenizer t = new StringTokenizer(pattern, " "); if (t.countTokens() == 1) { // fts-alfresco property search i.e. location:"maidenhead" query.append('"').append(pattern).append("*\""); } else { // multiple terms supplied - look for first and second name etc. // assume first term is first name, any more are second i.e. // "Fraun van de Wiels" // also allow fts-alfresco property search to reduce results params.setDefaultOperator(SearchParameters.Operator.AND); StringBuilder multiPartNames = new StringBuilder(pattern.length()); int numOfTokens = t.countTokens(); int counter = 1; String term = null; // MNT-8539, in order to support firstname and lastname search while (t.hasMoreTokens()) { term = t.nextToken(); // ALF-11311, in order to support multi-part // firstNames/lastNames, we need to use the whole tokenized term for both // firstName and lastName if (term.endsWith("*")) { term = term.substring(0, term.lastIndexOf("*")); } multiPartNames.append("\""); multiPartNames.append(term); multiPartNames.append("*\""); if (numOfTokens > counter) { multiPartNames.append(' '); } counter++; } // ALF-11311, in order to support multi-part firstNames/lastNames, // we need to use the whole tokenized term for both firstName and lastName. // e.g. "john junior lewis martinez", where "john junior" is the first // name and "lewis martinez" is the last name. if (multiPartNames.length() > 0) { query.append("firstName:"); query.append(multiPartNames); query.append(" OR lastName:"); query.append(multiPartNames); } } query.append(")"); // define the search parameters params.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO); params.addStore(this.storeRef); params.setQuery(query.toString()); if (pagingRequest.getMaxItems() > 0) { params.setLimitBy(LimitBy.FINAL_SIZE); params.setLimit(pagingRequest.getMaxItems()); } ResultSet results = null; try { results = searchService.query(params); people = results.getNodeRefs(); } catch (Throwable err) { if (logger.isDebugEnabled()) { logger.debug("Failed to execute people search: " + query.toString(), err); } throw err; } finally { if (results != null) { results.close(); } } return people; }