use of org.alfresco.repo.dictionary.IndexTokenisationMode in project SearchServices by Alfresco.
the class Solr4QueryParser method spanQueryBuilder.
private Query spanQueryBuilder(String field, String first, String last, int slop, boolean inOrder) throws ParseException {
String propertyFieldName = field.substring(1);
String expandedFieldName = null;
PropertyDefinition propertyDef = QueryParserUtils.matchPropertyDefinition(searchParameters.getNamespace(), namespacePrefixResolver, dictionaryService, propertyFieldName);
IndexTokenisationMode tokenisationMode = IndexTokenisationMode.TRUE;
if (propertyDef != null) {
tokenisationMode = propertyDef.getIndexTokenisationMode();
if (tokenisationMode == null) {
tokenisationMode = IndexTokenisationMode.TRUE;
}
} else {
expandedFieldName = expandAttributeFieldName(field);
}
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.MLTEXT))) {
// Build a sub query for each locale and or the results together -
// the analysis will take care of
// cross language matching for each entry
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
List<Locale> locales = searchParameters.getLocales();
List<Locale> expandedLocales = new ArrayList<Locale>();
for (Locale locale : (((locales == null) || (locales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : locales)) {
expandedLocales.addAll(MLAnalysisMode.getLocales(mlAnalysisMode, locale, false));
}
for (Locale locale : (((expandedLocales == null) || (expandedLocales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : expandedLocales)) {
addMLTextSpanQuery(field, propertyDef, first, last, slop, inOrder, expandedFieldName, propertyDef, tokenisationMode, booleanQuery, locale);
}
return booleanQuery.build();
} else // Content
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
List<Locale> locales = searchParameters.getLocales();
List<Locale> expandedLocales = new ArrayList<Locale>();
for (Locale locale : (((locales == null) || (locales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : locales)) {
expandedLocales.addAll(MLAnalysisMode.getLocales(mlAnalysisMode, locale, addContentCrossLocaleWildcards()));
}
return addContentSpanQuery(field, propertyDef, first, last, slop, inOrder, expandedFieldName, expandedLocales);
} else if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT))) {
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
List<Locale> locales = searchParameters.getLocales();
List<Locale> expandedLocales = new ArrayList<Locale>();
for (Locale locale : (((locales == null) || (locales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : locales)) {
expandedLocales.addAll(MLAnalysisMode.getLocales(mlAnalysisMode, locale, false));
}
for (Locale locale : (((expandedLocales == null) || (expandedLocales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : expandedLocales)) {
addTextSpanQuery(field, propertyDef, first, last, slop, inOrder, expandedFieldName, tokenisationMode, booleanQuery, locale);
}
return booleanQuery.build();
} else {
throw new UnsupportedOperationException("Span queries are only supported for d:text, d:mltext and d:content data types");
}
}
use of org.alfresco.repo.dictionary.IndexTokenisationMode in project SearchServices by Alfresco.
the class Solr4QueryParser method getRangeQuery.
/**
* @param field
* @param part1
* @param part2
* @param includeLower
* @param includeUpper
* @param analysisMode
* @param luceneFunction
* @return the query
* @exception ParseException
* throw in overridden method to disallow
*/
public Query getRangeQuery(String field, String part1, String part2, boolean includeLower, boolean includeUpper, AnalysisMode analysisMode, LuceneFunction luceneFunction) throws ParseException {
if (field.equals(FIELD_PATH)) {
throw new UnsupportedOperationException("Range Queries are not support for " + FIELD_PATH);
} else if (field.equals(FIELD_PATHWITHREPEATS)) {
throw new UnsupportedOperationException("Range Queries are not support for " + FIELD_PATHWITHREPEATS);
} else if (field.equals(FIELD_TEXT)) {
Set<String> text = searchParameters.getTextAttributes();
if ((text == null) || (text.size() == 0)) {
Query query = getRangeQuery(PROPERTY_FIELD_PREFIX + ContentModel.PROP_CONTENT.toString(), part1, part2, includeLower, includeUpper, analysisMode, luceneFunction);
if (query == null) {
return createNoMatchQuery();
}
return query;
} else {
BooleanQuery.Builder query = new BooleanQuery.Builder();
for (String fieldName : text) {
Query part = getRangeQuery(fieldName, part1, part2, includeLower, includeUpper, analysisMode, luceneFunction);
if (part != null) {
query.add(part, Occur.SHOULD);
} else {
query.add(createNoMatchQuery(), Occur.SHOULD);
}
}
return query.build();
}
} else if (field.equals(FIELD_CASCADETX)) {
SchemaField sf = schema.getField(FIELD_CASCADETX);
if (sf != null) {
String start = null;
try {
analyzeMultitermTerm(FIELD_CASCADETX, part1);
start = part1;
} catch (Exception e) {
}
String end = null;
try {
analyzeMultitermTerm(FIELD_CASCADETX, part2);
end = part2;
} catch (Exception e) {
}
return sf.getType().getRangeQuery(null, sf, start, end, includeLower, includeUpper);
} else {
throw new UnsupportedOperationException();
}
}
// FIELD_TYPE uses the default
if (isPropertyField(field)) {
Pair<String, String> fieldNameAndEnding = QueryParserUtils.extractFieldNameAndEnding(field);
String expandedFieldName = null;
PropertyDefinition propertyDef = QueryParserUtils.matchPropertyDefinition(searchParameters.getNamespace(), namespacePrefixResolver, dictionaryService, fieldNameAndEnding.getFirst());
IndexTokenisationMode tokenisationMode = IndexTokenisationMode.TRUE;
if (propertyDef != null) {
tokenisationMode = propertyDef.getIndexTokenisationMode();
if (tokenisationMode == null) {
tokenisationMode = IndexTokenisationMode.TRUE;
}
} else {
expandedFieldName = expandAttributeFieldName(field);
}
if (propertyDef != null) {
// LOWER AND UPPER
if (luceneFunction != LuceneFunction.FIELD) {
if (luceneFunction == LuceneFunction.LOWER) {
if ((false == part1.toLowerCase().equals(part1)) || (false == part2.toLowerCase().equals(part2))) {
return createNoMatchQuery();
}
}
if (luceneFunction == LuceneFunction.UPPER) {
if ((false == part1.toUpperCase().equals(part1)) || (false == part2.toUpperCase().equals(part2))) {
return createNoMatchQuery();
}
}
if (propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT)) {
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
List<Locale> locales = searchParameters.getLocales();
List<Locale> expandedLocales = new ArrayList<Locale>();
for (Locale locale : (((locales == null) || (locales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : locales)) {
expandedLocales.addAll(MLAnalysisMode.getLocales(mlAnalysisMode, locale, false));
}
for (Locale locale : (((expandedLocales == null) || (expandedLocales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : expandedLocales)) {
addLocaleSpecificUntokenisedTextRangeFunction(expandedFieldName, propertyDef, part1, part2, includeLower, includeUpper, luceneFunction, booleanQuery, locale, tokenisationMode);
}
return booleanQuery.build();
} else {
throw new UnsupportedOperationException("Lucene Function");
}
}
if (propertyDef.getDataType().getName().equals(DataTypeDefinition.MLTEXT)) {
return buildTextMLTextOrContentRange(field, part1, part2, includeLower, includeUpper, analysisMode, expandedFieldName, propertyDef, tokenisationMode);
} else if (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT)) {
String solrField = null;
switch(fieldNameAndEnding.getSecond()) {
case FIELD_SIZE_SUFFIX:
solrField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), ContentFieldType.SIZE, FieldUse.ID).getFields().get(0).getField();
break;
case FIELD_MIMETYPE_SUFFIX:
solrField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), ContentFieldType.MIMETYPE, FieldUse.ID).getFields().get(0).getField();
break;
case FIELD_ENCODING_SUFFIX:
solrField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), ContentFieldType.ENCODING, FieldUse.ID).getFields().get(0).getField();
break;
case FIELD_LOCALE_SUFFIX:
solrField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), ContentFieldType.LOCALE, FieldUse.ID).getFields().get(0).getField();
break;
}
if (solrField != null) {
String start = null;
try {
analyzeMultitermTerm(solrField, part1);
start = part1;
} catch (Exception e) {
}
String end = null;
try {
analyzeMultitermTerm(solrField, part2);
end = part2;
} catch (Exception e) {
}
SchemaField sf = schema.getField(solrField);
return sf.getType().getRangeQuery(null, sf, start, end, includeLower, includeUpper);
} else {
return buildTextMLTextOrContentRange(field, part1, part2, includeLower, includeUpper, analysisMode, expandedFieldName, propertyDef, tokenisationMode);
}
} else if (propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT)) {
return buildTextMLTextOrContentRange(field, part1, part2, includeLower, includeUpper, analysisMode, expandedFieldName, propertyDef, tokenisationMode);
} else if (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME) || propertyDef.getDataType().getName().equals(DataTypeDefinition.DATE)) {
Pair<Date, Integer> dateAndResolution1 = parseDateString(part1);
Pair<Date, Integer> dateAndResolution2 = parseDateString(part2);
BooleanQuery.Builder bQuery = new BooleanQuery.Builder();
IndexedField indexedField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), null, FieldUse.ID);
for (FieldInstance instance : indexedField.getFields()) {
String start = dateAndResolution1 == null ? part1 : (includeLower ? getDateStart(dateAndResolution1) : getDateEnd(dateAndResolution1));
String end = dateAndResolution2 == null ? part2 : (includeUpper ? getDateEnd(dateAndResolution2) : getDateStart(dateAndResolution2));
if (start.equals("*")) {
start = null;
}
if (end.equals("*")) {
end = null;
}
SchemaField sf = schema.getField(instance.getField());
Query query = sf.getType().getRangeQuery(null, sf, start, end, includeLower, includeUpper);
if (query != null) {
bQuery.add(query, Occur.SHOULD);
}
}
return bQuery.build();
} else {
String solrField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), null, FieldUse.ID).getFields().get(0).getField();
String start = null;
try {
analyzeMultitermTerm(solrField, part1);
start = part1;
} catch (Exception e) {
}
String end = null;
try {
analyzeMultitermTerm(solrField, part2);
end = part2;
} catch (Exception e) {
}
SchemaField sf = schema.getField(solrField);
return sf.getType().getRangeQuery(null, sf, start, end, includeLower, includeUpper);
}
} else {
throw new UnsupportedOperationException();
}
} else if (field.equals(FIELD_ALL)) {
Set<String> all = searchParameters.getAllAttributes();
if ((all == null) || (all.size() == 0)) {
Collection<QName> contentAttributes = dictionaryService.getAllProperties(null);
BooleanQuery.Builder query = new BooleanQuery.Builder();
for (QName qname : contentAttributes) {
Query part = getRangeQuery(PROPERTY_FIELD_PREFIX + qname.toString(), part1, part2, includeLower, includeUpper, analysisMode, luceneFunction);
query.add(part, Occur.SHOULD);
}
return query.build();
} else {
BooleanQuery.Builder query = new BooleanQuery.Builder();
for (String fieldName : all) {
Query part = getRangeQuery(fieldName, part1, part2, includeLower, includeUpper, analysisMode, luceneFunction);
query.add(part, Occur.SHOULD);
}
return query.build();
}
} else // FIELD_EXISTS uses the default
if (QueryParserUtils.matchDataTypeDefinition(searchParameters.getNamespace(), namespacePrefixResolver, dictionaryService, field) != null) {
Collection<QName> contentAttributes = dictionaryService.getAllProperties(QueryParserUtils.matchDataTypeDefinition(searchParameters.getNamespace(), namespacePrefixResolver, dictionaryService, field).getName());
BooleanQuery.Builder query = new BooleanQuery.Builder();
for (QName qname : contentAttributes) {
Query part = getRangeQuery(PROPERTY_FIELD_PREFIX + qname.toString(), part1, part2, includeLower, includeUpper, analysisMode, luceneFunction);
query.add(part, Occur.SHOULD);
}
return query.build();
}
// FIELD_FTSSTATUS uses the default
if (field.equals(FIELD_TAG)) {
throw new UnsupportedOperationException("Range Queries are not support for " + FIELD_TAG);
} else {
// None property - leave alone
throw new UnsupportedOperationException();
}
}
use of org.alfresco.repo.dictionary.IndexTokenisationMode in project SearchServices by Alfresco.
the class Solr4QueryParser method attributeQueryBuilder.
private Query attributeQueryBuilder(String field, String queryText, SubQuery subQueryBuilder, AnalysisMode analysisMode, LuceneFunction luceneFunction) throws ParseException {
// TODO: Fix duplicate token generation for mltext, content and text.
// -locale expansion here and in tokeisation -> duplicates
// Get type info etc
// TODO: additional suffixes
Pair<String, String> fieldNameAndEnding = QueryParserUtils.extractFieldNameAndEnding(field);
String expandedFieldName = null;
QName propertyQName;
PropertyDefinition propertyDef = QueryParserUtils.matchPropertyDefinition(searchParameters.getNamespace(), namespacePrefixResolver, dictionaryService, fieldNameAndEnding.getFirst());
IndexTokenisationMode tokenisationMode = IndexTokenisationMode.TRUE;
if (propertyDef != null) {
tokenisationMode = propertyDef.getIndexTokenisationMode();
if (tokenisationMode == null) {
tokenisationMode = IndexTokenisationMode.TRUE;
}
propertyQName = propertyDef.getName();
} else {
expandedFieldName = expandAttributeFieldName(field);
propertyQName = QName.createQName(fieldNameAndEnding.getFirst());
}
if (isAllStar(queryText)) {
return createTermQuery(FIELD_PROPERTIES, propertyQName.toString());
}
if (luceneFunction != LuceneFunction.FIELD) {
if ((tokenisationMode == IndexTokenisationMode.FALSE) || (tokenisationMode == IndexTokenisationMode.BOTH)) {
if (luceneFunction == LuceneFunction.LOWER) {
if (false == queryText.toLowerCase().equals(queryText)) {
return createNoMatchQuery();
}
}
if (luceneFunction == LuceneFunction.UPPER) {
if (false == queryText.toUpperCase().equals(queryText)) {
return createNoMatchQuery();
}
}
return functionQueryBuilder(expandedFieldName, fieldNameAndEnding.getSecond(), propertyQName, propertyDef, tokenisationMode, queryText, luceneFunction);
}
}
// Mime type
if (fieldNameAndEnding.getSecond().equals(FIELD_MIMETYPE_SUFFIX)) {
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
return subQueryBuilder.getQuery(AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyQName, ContentFieldType.MIMETYPE, FieldUse.ID).getFields().get(0).getField(), queryText, analysisMode, luceneFunction);
}
} else if (fieldNameAndEnding.getSecond().equals(FIELD_SIZE_SUFFIX)) {
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
return subQueryBuilder.getQuery(AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyQName, ContentFieldType.SIZE, FieldUse.ID).getFields().get(0).getField(), queryText, analysisMode, luceneFunction);
}
} else if (fieldNameAndEnding.getSecond().equals(FIELD_LOCALE_SUFFIX)) {
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
return subQueryBuilder.getQuery(AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyQName, ContentFieldType.LOCALE, FieldUse.ID).getFields().get(0).getField(), queryText, analysisMode, luceneFunction);
}
} else if (fieldNameAndEnding.getSecond().equals(FIELD_ENCODING_SUFFIX)) {
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
return subQueryBuilder.getQuery(AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyQName, ContentFieldType.ENCODING, FieldUse.ID).getFields().get(0).getField(), queryText, analysisMode, luceneFunction);
}
} else if (fieldNameAndEnding.getSecond().equals(FIELD_TRANSFORMATION_STATUS_SUFFIX)) {
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
return subQueryBuilder.getQuery(AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyQName, ContentFieldType.TRANSFORMATION_STATUS, FieldUse.ID).getFields().get(0).getField(), queryText, analysisMode, luceneFunction);
}
} else if (fieldNameAndEnding.getSecond().equals(FIELD_TRANSFORMATION_TIME_SUFFIX)) {
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
return subQueryBuilder.getQuery(AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyQName, ContentFieldType.TRANSFORMATION_TIME, FieldUse.ID).getFields().get(0).getField(), queryText, analysisMode, luceneFunction);
}
} else if (fieldNameAndEnding.getSecond().equals(FIELD_TRANSFORMATION_EXCEPTION_SUFFIX)) {
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
return subQueryBuilder.getQuery(AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyQName, ContentFieldType.TRANSFORMATION_EXCEPTION, FieldUse.ID).getFields().get(0).getField(), queryText, analysisMode, luceneFunction);
}
}
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.MLTEXT))) {
// Build a sub query for each locale and or the results together -
// the analysis will take care of
// cross language matching for each entry
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
List<Locale> locales = searchParameters.getLocales();
List<Locale> expandedLocales = new ArrayList<Locale>();
for (Locale locale : (((locales == null) || (locales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : locales)) {
expandedLocales.addAll(MLAnalysisMode.getLocales(mlAnalysisMode, locale, false));
}
for (Locale locale : (((expandedLocales == null) || (expandedLocales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : expandedLocales)) {
addMLTextAttributeQuery(field, propertyDef, queryText, subQueryBuilder, analysisMode, luceneFunction, expandedFieldName, propertyDef, tokenisationMode, booleanQuery, locale);
}
return getNonEmptyBooleanQuery(booleanQuery.build());
} else // Content
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT))) {
// Identifier request are ignored for content
// Build a sub query for each locale and or the results together -
// - add an explicit condition for the locale
List<Locale> locales = searchParameters.getLocales();
List<Locale> expandedLocales = new ArrayList<Locale>();
for (Locale locale : (((locales == null) || (locales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : locales)) {
expandedLocales.addAll(MLAnalysisMode.getLocales(mlAnalysisMode, locale, addContentCrossLocaleWildcards()));
}
return addContentAttributeQuery(propertyDef, queryText, subQueryBuilder, analysisMode, luceneFunction, expandedFieldName, expandedLocales);
} else if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT))) {
// if (propertyQName.equals(ContentModel.PROP_USER_USERNAME) ||
// propertyQName.equals(ContentModel.PROP_USERNAME) ||
// propertyQName.equals(ContentModel.PROP_AUTHORITY_NAME))
// {
// // nasty work around for solr support for user and group look up
// as we can not support lowercased identifiers in the model
// if(isLucene())
// {
// return subQueryBuilder.getQuery(expandedFieldName, queryText,
// analysisMode, luceneFunction);
// }
// }
boolean withWildCards = propertyQName.equals(ContentModel.PROP_USER_USERNAME) || propertyQName.equals(ContentModel.PROP_USERNAME) || propertyQName.equals(ContentModel.PROP_AUTHORITY_NAME);
BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
List<Locale> locales = searchParameters.getLocales();
List<Locale> expandedLocales = new ArrayList<Locale>();
for (Locale locale : (((locales == null) || (locales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : locales)) {
expandedLocales.addAll(MLAnalysisMode.getLocales(mlAnalysisMode, locale, withWildCards));
}
for (Locale locale : (((expandedLocales == null) || (expandedLocales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : expandedLocales)) {
Locale fixedLocale = locale;
if (fixedLocale.getLanguage().equals("*")) {
fixedLocale = new Locale("??");
}
addTextAttributeQuery(field, propertyDef, queryText, subQueryBuilder, analysisMode, luceneFunction, expandedFieldName, tokenisationMode, booleanQuery, fixedLocale);
}
return getNonEmptyBooleanQuery(booleanQuery.build());
} else {
// Date does not support like
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME))) {
if (analysisMode == AnalysisMode.LIKE) {
throw new UnsupportedOperationException("Wild cards are not supported for the datetime type");
}
}
// expand date for loose date parsing
if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME) || propertyDef.getDataType().getName().equals(DataTypeDefinition.DATE))) {
Pair<Date, Integer> dateAndResolution = parseDateString(queryText);
BooleanQuery.Builder bQuery = new BooleanQuery.Builder();
IndexedField indexedField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), null, FieldUse.FTS);
for (FieldInstance instance : indexedField.getFields()) {
if (dateAndResolution != null) {
Query query = newRangeQuery(instance.getField(), getDateStart(dateAndResolution), getDateEnd(dateAndResolution), true, true);
if (query != null) {
bQuery.add(query, Occur.SHOULD);
}
} else {
Query query = subQueryBuilder.getQuery(instance.getField(), queryText, AnalysisMode.DEFAULT, luceneFunction);
if (query != null) {
bQuery.add(query, Occur.SHOULD);
}
}
}
if (bQuery.build().clauses().size() > 0) {
return bQuery.build();
} else {
return createNoMatchQuery();
}
}
if ((propertyDef != null) && (tenantService.isTenantUser()) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.NODE_REF)) && (queryText.contains(StoreRef.URI_FILLER))) {
// ALF-6202
queryText = tenantService.getName(new NodeRef(queryText)).toString();
}
// Dates are not special in this case
if (propertyDef != null) {
BooleanQuery.Builder bQuery = new BooleanQuery.Builder();
IndexedField indexedField = AlfrescoSolrDataModel.getInstance().getQueryableFields(propertyDef.getName(), null, FieldUse.FTS);
for (FieldInstance instance : indexedField.getFields()) {
Query query = subQueryBuilder.getQuery(instance.getField(), queryText, AnalysisMode.DEFAULT, luceneFunction);
if (query != null) {
bQuery.add(query, Occur.SHOULD);
}
}
if (bQuery.build().clauses().size() > 0) {
return bQuery.build();
} else {
return createNoMatchQuery();
}
} else {
Query query = subQueryBuilder.getQuery(expandedFieldName, queryText, AnalysisMode.DEFAULT, luceneFunction);
if (query != null) {
return query;
} else {
return createNoMatchQuery();
}
}
}
}
Aggregations