mirror of
https://github.com/Alfresco/SearchServices.git
synced 2025-09-10 14:11:25 +00:00
[SEARCH-1445]
Fix to enable default search on: cm:name, cm:title, cm:description and cm:content code refactoring: removed duplicated code for text queries.
This commit is contained in:
@@ -38,7 +38,8 @@ import java.util.concurrent.Callable;
|
|||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.repo.dictionary.IndexTokenisationMode;
|
import org.alfresco.repo.dictionary.IndexTokenisationMode;
|
||||||
import org.alfresco.repo.search.MLAnalysisMode;
|
import org.alfresco.repo.search.MLAnalysisMode;
|
||||||
@@ -72,6 +73,7 @@ import org.alfresco.solr.AlfrescoSolrDataModel.IndexedField;
|
|||||||
import org.alfresco.solr.SolrInformationServer;
|
import org.alfresco.solr.SolrInformationServer;
|
||||||
import org.alfresco.solr.component.FingerPrintComponent;
|
import org.alfresco.solr.component.FingerPrintComponent;
|
||||||
import org.alfresco.solr.content.SolrContentStore;
|
import org.alfresco.solr.content.SolrContentStore;
|
||||||
|
import org.alfresco.solr.utils.ThrowingFunction;
|
||||||
import org.alfresco.util.CachingDateFormat;
|
import org.alfresco.util.CachingDateFormat;
|
||||||
import org.alfresco.util.Pair;
|
import org.alfresco.util.Pair;
|
||||||
import org.alfresco.util.SearchLanguageConversion;
|
import org.alfresco.util.SearchLanguageConversion;
|
||||||
@@ -405,22 +407,7 @@ public class Solr4QueryParser extends QueryParser implements QueryConstants
|
|||||||
throw new UnsupportedOperationException("Span is not supported for " + FIELD_PATHWITHREPEATS);
|
throw new UnsupportedOperationException("Span is not supported for " + FIELD_PATHWITHREPEATS);
|
||||||
} else if (field.equals(FIELD_TEXT))
|
} else if (field.equals(FIELD_TEXT))
|
||||||
{
|
{
|
||||||
Set<String> text = searchParameters.getTextAttributes();
|
return createDefaultTextQuery(textFiled -> getSpanQuery(textFiled, first, last, slop, inOrder));
|
||||||
if ((text == null) || (text.size() == 0))
|
|
||||||
{
|
|
||||||
Query query = getSpanQuery(PROPERTY_FIELD_PREFIX + ContentModel.PROP_CONTENT.toString(), first, last,
|
|
||||||
slop, inOrder);
|
|
||||||
return query;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
BooleanQuery.Builder query = new BooleanQuery.Builder();
|
|
||||||
for (String fieldName : text)
|
|
||||||
{
|
|
||||||
Query part = getSpanQuery(fieldName, first, last, slop, inOrder);
|
|
||||||
query.add(part, Occur.SHOULD);
|
|
||||||
}
|
|
||||||
return query.build();
|
|
||||||
}
|
|
||||||
} else if (field.equals(FIELD_CLASS))
|
} else if (field.equals(FIELD_CLASS))
|
||||||
{
|
{
|
||||||
throw new UnsupportedOperationException("Span is not supported for " + FIELD_CLASS);
|
throw new UnsupportedOperationException("Span is not supported for " + FIELD_CLASS);
|
||||||
@@ -1485,35 +1472,46 @@ public class Solr4QueryParser extends QueryParser implements QueryConstants
|
|||||||
return createTermQuery(field, queryText);
|
return createTermQuery(field, queryText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Get generic text query
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
protected Query createDefaultTextQuery(ThrowingFunction<String, Query, ParseException> getQuery) throws ParseException
|
||||||
|
{
|
||||||
|
|
||||||
|
Set<String> text = searchParameters.getTextAttributes();
|
||||||
|
if (text == null || text.isEmpty())
|
||||||
|
{
|
||||||
|
text = Stream.of(AlfrescoDefaultTextFields.values())
|
||||||
|
.map(t -> PROPERTY_FIELD_PREFIX + t.getFieldName())
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
|
BooleanQuery.Builder query = new BooleanQuery.Builder();
|
||||||
|
for (String fieldName : text)
|
||||||
|
{
|
||||||
|
Query part = getQuery.apply(fieldName);
|
||||||
|
if (part != null)
|
||||||
|
{
|
||||||
|
query.add(part, Occur.SHOULD);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
query.add(createNoMatchQuery(), Occur.SHOULD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return query.build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected Query createTextQuery(String queryText, AnalysisMode analysisMode, LuceneFunction luceneFunction)
|
protected Query createTextQuery(String queryText, AnalysisMode analysisMode, LuceneFunction luceneFunction)
|
||||||
throws ParseException
|
throws ParseException
|
||||||
{
|
{
|
||||||
Set<String> text = searchParameters.getTextAttributes();
|
return createDefaultTextQuery(textField -> getFieldQuery(textField, queryText, analysisMode, luceneFunction));
|
||||||
if ((text == null) || (text.size() == 0))
|
|
||||||
{
|
|
||||||
Query query = getFieldQuery(PROPERTY_FIELD_PREFIX + ContentModel.PROP_CONTENT.toString(), queryText,
|
|
||||||
analysisMode, luceneFunction);
|
|
||||||
if (query == null)
|
|
||||||
{
|
|
||||||
return createNoMatchQuery();
|
|
||||||
}
|
|
||||||
return query;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
BooleanQuery.Builder query = new BooleanQuery.Builder();
|
|
||||||
for (String fieldName : text)
|
|
||||||
{
|
|
||||||
Query part = getFieldQuery(fieldName, queryText, analysisMode, luceneFunction);
|
|
||||||
if (part != null)
|
|
||||||
{
|
|
||||||
query.add(part, Occur.SHOULD);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
query.add(createNoMatchQuery(), Occur.SHOULD);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return query.build();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@@ -2951,34 +2949,10 @@ public class Solr4QueryParser extends QueryParser implements QueryConstants
|
|||||||
throw new UnsupportedOperationException("Range Queries are not support for " + FIELD_PATHWITHREPEATS);
|
throw new UnsupportedOperationException("Range Queries are not support for " + FIELD_PATHWITHREPEATS);
|
||||||
} else if (field.equals(FIELD_TEXT))
|
} 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;
|
return createDefaultTextQuery(textField -> getRangeQuery(textField, part1, part2, includeLower,
|
||||||
} else
|
includeUpper, analysisMode, luceneFunction));
|
||||||
{
|
|
||||||
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))
|
} else if (field.equals(FIELD_CASCADETX))
|
||||||
{
|
{
|
||||||
@@ -3384,33 +3358,9 @@ public class Solr4QueryParser extends QueryParser implements QueryConstants
|
|||||||
throw new UnsupportedOperationException("Prefix Queries are not support for " + FIELD_PATHWITHREPEATS);
|
throw new UnsupportedOperationException("Prefix Queries are not support for " + FIELD_PATHWITHREPEATS);
|
||||||
} else if (field.equals(FIELD_TEXT))
|
} else if (field.equals(FIELD_TEXT))
|
||||||
{
|
{
|
||||||
Set<String> text = searchParameters.getTextAttributes();
|
|
||||||
if ((text == null) || (text.size() == 0))
|
|
||||||
{
|
|
||||||
Query query = getPrefixQuery(PROPERTY_FIELD_PREFIX + ContentModel.PROP_CONTENT.toString(), termStr,
|
|
||||||
analysisMode);
|
|
||||||
if (query == null)
|
|
||||||
{
|
|
||||||
return createNoMatchQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
return query;
|
return createDefaultTextQuery(textField -> getPrefixQuery(textField, termStr, analysisMode));
|
||||||
} else
|
|
||||||
{
|
|
||||||
BooleanQuery.Builder query = new BooleanQuery.Builder();
|
|
||||||
for (String fieldName : text)
|
|
||||||
{
|
|
||||||
Query part = getPrefixQuery(fieldName, termStr, analysisMode);
|
|
||||||
if (part != null)
|
|
||||||
{
|
|
||||||
query.add(part, Occur.SHOULD);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
query.add(createNoMatchQuery(), Occur.SHOULD);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return query.build();
|
|
||||||
}
|
|
||||||
} else if (field.equals(FIELD_ID))
|
} else if (field.equals(FIELD_ID))
|
||||||
{
|
{
|
||||||
boolean lowercaseExpandedTerms = getLowercaseExpandedTerms();
|
boolean lowercaseExpandedTerms = getLowercaseExpandedTerms();
|
||||||
@@ -3572,33 +3522,9 @@ public class Solr4QueryParser extends QueryParser implements QueryConstants
|
|||||||
throw new UnsupportedOperationException("Wildcard Queries are not support for " + FIELD_PATHWITHREPEATS);
|
throw new UnsupportedOperationException("Wildcard Queries are not support for " + FIELD_PATHWITHREPEATS);
|
||||||
} else if (field.equals(FIELD_TEXT))
|
} else if (field.equals(FIELD_TEXT))
|
||||||
{
|
{
|
||||||
Set<String> text = searchParameters.getTextAttributes();
|
|
||||||
if ((text == null) || (text.size() == 0))
|
|
||||||
{
|
|
||||||
Query query = getWildcardQuery(PROPERTY_FIELD_PREFIX + ContentModel.PROP_CONTENT.toString(), termStr,
|
|
||||||
analysisMode);
|
|
||||||
if (query == null)
|
|
||||||
{
|
|
||||||
return createNoMatchQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
return query;
|
return createDefaultTextQuery(textField -> getWildcardQuery(textField, termStr, analysisMode));
|
||||||
} else
|
|
||||||
{
|
|
||||||
BooleanQuery.Builder query = new BooleanQuery.Builder();
|
|
||||||
for (String fieldName : text)
|
|
||||||
{
|
|
||||||
Query part = getWildcardQuery(fieldName, termStr, analysisMode);
|
|
||||||
if (part != null)
|
|
||||||
{
|
|
||||||
query.add(part, Occur.SHOULD);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
query.add(createNoMatchQuery(), Occur.SHOULD);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return query.build();
|
|
||||||
}
|
|
||||||
} else if (field.equals(FIELD_ID))
|
} else if (field.equals(FIELD_ID))
|
||||||
{
|
{
|
||||||
boolean lowercaseExpandedTerms = getLowercaseExpandedTerms();
|
boolean lowercaseExpandedTerms = getLowercaseExpandedTerms();
|
||||||
@@ -3755,33 +3681,9 @@ public class Solr4QueryParser extends QueryParser implements QueryConstants
|
|||||||
throw new UnsupportedOperationException("Fuzzy Queries are not support for " + FIELD_PATHWITHREPEATS);
|
throw new UnsupportedOperationException("Fuzzy Queries are not support for " + FIELD_PATHWITHREPEATS);
|
||||||
} else if (field.equals(FIELD_TEXT))
|
} else if (field.equals(FIELD_TEXT))
|
||||||
{
|
{
|
||||||
Set<String> text = searchParameters.getTextAttributes();
|
|
||||||
if ((text == null) || (text.size() == 0))
|
|
||||||
{
|
|
||||||
Query query = getFuzzyQuery(PROPERTY_FIELD_PREFIX + ContentModel.PROP_CONTENT.toString(), termStr,
|
|
||||||
minSimilarity);
|
|
||||||
if (query == null)
|
|
||||||
{
|
|
||||||
return createNoMatchQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
return query;
|
return createDefaultTextQuery(textField -> getFuzzyQuery(textField, termStr, minSimilarity));
|
||||||
} else
|
|
||||||
{
|
|
||||||
BooleanQuery.Builder query = new BooleanQuery.Builder();
|
|
||||||
for (String fieldName : text)
|
|
||||||
{
|
|
||||||
Query part = getFuzzyQuery(fieldName, termStr, minSimilarity);
|
|
||||||
if (part != null)
|
|
||||||
{
|
|
||||||
query.add(part, Occur.SHOULD);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
query.add(createNoMatchQuery(), Occur.SHOULD);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return query.build();
|
|
||||||
}
|
|
||||||
} else if (field.equals(FIELD_ID) || field.equals(FIELD_DBID) || field.equals(FIELD_ISROOT)
|
} else if (field.equals(FIELD_ID) || field.equals(FIELD_DBID) || field.equals(FIELD_ISROOT)
|
||||||
|| field.equals(FIELD_ISCONTAINER) || field.equals(FIELD_ISNODE) || field.equals(FIELD_TX)
|
|| field.equals(FIELD_ISCONTAINER) || field.equals(FIELD_ISNODE) || field.equals(FIELD_TX)
|
||||||
|| field.equals(FIELD_PARENT) || field.equals(FIELD_PRIMARYPARENT) || field.equals(FIELD_QNAME)
|
|| field.equals(FIELD_PARENT) || field.equals(FIELD_PRIMARYPARENT) || field.equals(FIELD_QNAME)
|
||||||
|
Reference in New Issue
Block a user