cancel
Showing results for 
Search instead for 
Did you mean: 

CONTAINS keyword usage in CMIS queries

charlie_k
Champ in-the-making
Champ in-the-making
Hello,

I have CONTAINS keyword usage question. I am using Alfresco 5.0.d and trying to query my custom type objects via CMIS like this:
SELECT * FROM custom:type WHERE CONTAINS('test')


I tested this query via OpenCMIS Workbench. I expected to get all custom:type entries where at least one of my custom attributes has the text 'test'. But I guess I misunderstood how CONTAINS keyword works with CMIS - I get no results.

I found this earlier post which describes similar problem:
http://forums.alfresco.com/forum/developer-discussions/alfresco-api/cmis-contains-not-finding-docume...
And I thought that this was fixed in version 3.4.3.. but it appears it is not the case.

I also tried this (same results as before):
SELECT * FROM custom:type WHERE CONTAINS('TEXT:test')

and this (I get an exception):
SELECT * FROM custom:type WHERE CONTAINS('ALL:test')

The latter query resulted in an error in workbench ("runtime: 08091542 Request failed 500 /solr4/alfresco/cmis…") and in alfresco logs:

ERROR [solr.core.SolrCore] [http-bio-8443-exec-3] java.lang.UnsupportedOperationException
   at org.alfresco.solr.query.Solr4QueryParser.createAllQuery(Solr4QueryParser.java:1005)
   at org.alfresco.solr.query.Solr4QueryParser.getFieldQuery(Solr4QueryParser.java:615)
   at org.alfresco.solr.query.Lucene4QueryParserAdaptor.getFieldQuery(Lucene4QueryParserAdaptor.java:67)
   at org.alfresco.solr.query.Lucene4QueryParserAdaptor.getFieldQuery(Lucene4QueryParserAdaptor.java:48)
   at org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneFTSTerm.addComponent(LuceneFTSTerm.java:68)
   at org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneFunctionalConstraint.addComponent(LuceneFunctionalConstraint.java:57)
   at org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQuery.buildQuery(LuceneQuery.java:105)
   at org.alfresco.solr.AlfrescoSolrDataModel.getCMISQuery(AlfrescoSolrDataModel.java:2004)
   at org.alfresco.solr.query.CmisQParserPlugin$CmisQParser.parse(CmisQParserPlugin.java:189)
   at org.apache.solr.search.QParser.getQuery(QParser.java:141)


So the questions at hand are:
How should CONTAINS keyword work?
Is it possible to achieve my requirement (search in all attributes, without specifying all of them in the query)?

Charlie
1 REPLY 1

s_palyukh
Star Contributor
Star Contributor
Unfortunately, you will not be able to use pseudo-field "ALL", because it isn't implemented on alfresco side. Take a look at sources of method createAllQuery of class org.alfresco.solr.query.Solr4QueryParser:


protected Query createAllQuery(String queryText, AnalysisMode analysisMode, LuceneFunction luceneFunction) throws ParseException {
// Set<String> all = searchParameters.getAllAttributes();
// if ((all null) || (all.size() 0))
// {
// Collection<QName> contentAttributes = dictionaryService.getAllProperties(null);
// BooleanQuery query = new BooleanQuery();
// for (QName qname : contentAttributes)
// {
// // The super implementation will create phrase queries etc if required
// Query part = getFieldQuery(PROPERTY_FIELD_PREFIX + qname.toString(), queryText, analysisMode, luceneFunction);
// if (part != null)
// {
// query.add(part, Occur.SHOULD);
// }
// else
// {
// query.add(createNoMatchQuery(), Occur.SHOULD);
// }
// }
// return query;
// }
// else
// {
// BooleanQuery query = new BooleanQuery();
// for (String fieldName : all)
// {
// Query part = getFieldQuery(fieldName, queryText, analysisMode, luceneFunction);
// if (part != null)
// {
// query.add(part, Occur.SHOULD);
// }
// else
// {
// query.add(createNoMatchQuery(), Occur.SHOULD);
// }
// }
// return query;
// }
throw new UnsupportedOperationException();
}


So, you always receive UnsupportedOperationException, because other lines are commented.

Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.