use of org.alfresco.opencmis.search.CmisFunctionEvaluationContext in project SearchServices by Alfresco.
the class AlfrescoSolrDataModel method parseCMISQueryToAlfrescoAbstractQuery.
public org.alfresco.repo.search.impl.querymodel.Query parseCMISQueryToAlfrescoAbstractQuery(CMISQueryMode mode, SearchParameters searchParameters, SolrQueryRequest req, String alternativeDictionary, CmisVersion cmisVersion) {
// convert search parameters to cmis query options
// TODO: how to handle store ref
CMISQueryOptions options = new CMISQueryOptions(searchParameters.getQuery(), StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS);
options.setDefaultFieldName(searchParameters.getDefaultFieldName());
// TODO: options.setDefaultFTSConnective()
// TODO: options.setDefaultFTSFieldConnective()
options.setIncludeInTransactionData(!searchParameters.excludeDataInTheCurrentTransaction());
options.setLocales(searchParameters.getLocales());
options.setMlAnalaysisMode(searchParameters.getMlAnalaysisMode());
options.setQueryParameterDefinitions(searchParameters.getQueryParameterDefinitions());
for (String name : searchParameters.getQueryTemplates().keySet()) {
String template = searchParameters.getQueryTemplates().get(name);
options.addQueryTemplate(name, template);
}
// parse cmis syntax
CapabilityJoin joinSupport = (mode == CMISQueryMode.CMS_STRICT) ? CapabilityJoin.NONE : CapabilityJoin.INNERANDOUTER;
CmisFunctionEvaluationContext functionContext = getCMISFunctionEvaluationContext(mode, cmisVersion, alternativeDictionary);
CMISDictionaryService cmisDictionary = getCMISDictionary(alternativeDictionary, cmisVersion);
CMISQueryParser parser = new CMISQueryParser(options, cmisDictionary, joinSupport);
org.alfresco.repo.search.impl.querymodel.Query queryModelQuery = parser.parse(new LuceneQueryModelFactory<Query, Sort, SyntaxError>(), functionContext);
if (queryModelQuery.getSource() != null) {
List<Set<String>> selectorGroups = queryModelQuery.getSource().getSelectorGroups(functionContext);
if (selectorGroups.size() == 0) {
throw new UnsupportedOperationException("No selectors");
}
}
return queryModelQuery;
}
use of org.alfresco.opencmis.search.CmisFunctionEvaluationContext in project SearchServices by Alfresco.
the class AlfrescoSolrDataModel method getCMISQuery.
/**
* @param mode CMISQueryMode
* @param searchParametersAndFilter Pair<SearchParameters, Boolean>
* @param req SolrQueryRequest
* @param queryModelQuery Query
* @param cmisVersion CmisVersion
* @param alternativeDictionary String
* @return Query
* @throws ParseException
*/
public Query getCMISQuery(CMISQueryMode mode, Pair<SearchParameters, Boolean> searchParametersAndFilter, SolrQueryRequest req, org.alfresco.repo.search.impl.querymodel.Query queryModelQuery, CmisVersion cmisVersion, String alternativeDictionary) throws ParseException {
SearchParameters searchParameters = searchParametersAndFilter.getFirst();
Boolean isFilter = searchParametersAndFilter.getSecond();
CmisFunctionEvaluationContext functionContext = getCMISFunctionEvaluationContext(mode, cmisVersion, alternativeDictionary);
Set<String> selectorGroup = queryModelQuery.getSource().getSelectorGroups(functionContext).get(0);
LuceneQueryBuilderContext<Query, Sort, ParseException> luceneContext = getLuceneQueryBuilderContext(searchParameters, req, alternativeDictionary, FTSQueryParser.RerankPhase.SINGLE_PASS);
@SuppressWarnings("unchecked") LuceneQueryBuilder<Query, Sort, ParseException> builder = (LuceneQueryBuilder<Query, Sort, ParseException>) queryModelQuery;
org.apache.lucene.search.Query luceneQuery = builder.buildQuery(selectorGroup, luceneContext, functionContext);
ContextAwareQuery contextAwareQuery = new ContextAwareQuery(luceneQuery, Boolean.TRUE.equals(isFilter) ? null : searchParameters);
return contextAwareQuery;
}
use of org.alfresco.opencmis.search.CmisFunctionEvaluationContext in project SearchServices by Alfresco.
the class AlfrescoSolrDataModel method getCMISFunctionEvaluationContext.
public CmisFunctionEvaluationContext getCMISFunctionEvaluationContext(CMISQueryMode mode, CmisVersion cmisVersion, String alternativeDictionary) {
BaseTypeId[] validScopes = (mode == CMISQueryMode.CMS_STRICT) ? CmisFunctionEvaluationContext.STRICT_SCOPES : CmisFunctionEvaluationContext.ALFRESCO_SCOPES;
CmisFunctionEvaluationContext functionContext = new CmisFunctionEvaluationContext();
functionContext.setCmisDictionaryService(getCMISDictionary(alternativeDictionary, cmisVersion));
functionContext.setValidScopes(validScopes);
return functionContext;
}
use of org.alfresco.opencmis.search.CmisFunctionEvaluationContext in project alfresco-repository by Alfresco.
the class SolrOpenCMISQueryServiceImpl method query.
@Override
public CMISResultSet query(CMISQueryOptions options) {
SearchParameters searchParameters = options.getAsSearchParmeters();
searchParameters.addExtraParameter("cmisVersion", options.getCmisVersion().toString());
ResultSet rs = solrQueryLanguage.executeQuery(searchParameters);
CapabilityJoin joinSupport = getJoinSupport();
if (options.getQueryMode() == CMISQueryOptions.CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS) {
joinSupport = CapabilityJoin.INNERANDOUTER;
}
// TODO: Refactor to avoid duplication of valid scopes here and in CMISQueryParser
BaseTypeId[] validScopes = (options.getQueryMode() == CMISQueryMode.CMS_STRICT) ? CmisFunctionEvaluationContext.STRICT_SCOPES : CmisFunctionEvaluationContext.ALFRESCO_SCOPES;
CmisFunctionEvaluationContext functionContext = new CmisFunctionEvaluationContext();
functionContext.setCmisDictionaryService(cmisDictionaryService);
functionContext.setNodeService(nodeService);
functionContext.setValidScopes(validScopes);
CMISQueryParser parser = new CMISQueryParser(options, cmisDictionaryService, joinSupport);
Query query = parser.parse(new LuceneQueryModelFactory(), functionContext);
Map<String, ResultSet> wrapped = new HashMap<String, ResultSet>();
for (Set<String> group : query.getSource().getSelectorGroups(functionContext)) {
for (String selector : group) {
wrapped.put(selector, rs);
}
}
LimitBy limitBy = null;
limitBy = rs.getResultSetMetaData().getLimitedBy();
CMISResultSet cmis = new CMISResultSet(wrapped, options, limitBy, nodeService, query, cmisDictionaryService, alfrescoDictionaryService);
return cmis;
}
use of org.alfresco.opencmis.search.CmisFunctionEvaluationContext in project alfresco-repository by Alfresco.
the class DbCmisQueryLanguage method executeQueryImpl.
private ResultSet executeQueryImpl(SearchParameters searchParameters) {
CMISQueryOptions options = CMISQueryOptions.create(searchParameters);
options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS);
CapabilityJoin joinSupport = CapabilityJoin.INNERANDOUTER;
BaseTypeId[] validScopes = CmisFunctionEvaluationContext.ALFRESCO_SCOPES;
CmisFunctionEvaluationContext functionContext = new CmisFunctionEvaluationContext();
functionContext.setCmisDictionaryService(cmisDictionaryService);
functionContext.setValidScopes(validScopes);
CMISQueryParser parser = new CMISQueryParser(options, cmisDictionaryService, joinSupport);
org.alfresco.repo.search.impl.querymodel.Query queryModelQuery = parser.parse(new DBQueryModelFactory(), functionContext);
// TODO: Remove as this appears to be dead code
// // build lucene query
// Set<String> selectorGroup = null;
// if (queryModelQuery.getSource() != null)
// {
// List<Set<String>> selectorGroups = queryModelQuery.getSource().getSelectorGroups(functionContext);
// if (selectorGroups.size() == 0)
// {
// throw new UnsupportedOperationException("No selectors");
// }
// if (selectorGroups.size() > 1)
// {
// throw new UnsupportedOperationException("Advanced join is not supported");
// }
// selectorGroup = selectorGroups.get(0);
// }
//
QueryEngineResults results = queryEngine.executeQuery(queryModelQuery, options, functionContext);
ResultSet resultSet = results.getResults().values().iterator().next();
return resultSet;
}
Aggregations