Fix for ALF-11656 Person search starting with * goes the DB and return no results - it should go to the query

- DB is only used for * and * only at the end

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@32257 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2011-11-23 20:30:49 +00:00
parent b2bb939307
commit 5defa670b1

View File

@@ -534,8 +534,9 @@ public final class People extends BaseScopableProcessorExtension implements Init
String term = filter.replace("\\", "").replace("\"", ""); String term = filter.replace("\\", "").replace("\"", "");
StringTokenizer t = new StringTokenizer(term, " "); StringTokenizer t = new StringTokenizer(term, " ");
int propIndex = term.indexOf(':'); int propIndex = term.indexOf(':');
int wildPosition = term.indexOf('*');
if ((t.countTokens() == 1) && (propIndex == -1)) if ((t.countTokens() == 1) && (propIndex == -1) && ((wildPosition == -1) || (wildPosition == (term.length() - 1) )))
{ {
// simple non-FTS filter: firstname or lastname or username starting with term (ignoring case) // simple non-FTS filter: firstname or lastname or username starting with term (ignoring case)
@@ -557,6 +558,8 @@ public final class People extends BaseScopableProcessorExtension implements Init
else else
{ {
SearchParameters params = new SearchParameters(); SearchParameters params = new SearchParameters();
params.addQueryTemplate("_PERSON", "|%firstName OR |%lastName OR |%userName");
params.setDefaultFieldName("_PERSON");
StringBuilder query = new StringBuilder(256); StringBuilder query = new StringBuilder(256);
@@ -564,11 +567,20 @@ public final class People extends BaseScopableProcessorExtension implements Init
if (t.countTokens() == 1) if (t.countTokens() == 1)
{ {
// single word with no field will go against _PERSON and expand
// fts-alfresco property search i.e. location:"maidenhead" // fts-alfresco property search i.e. location:"maidenhead"
query.append(term.substring(0, propIndex+1)) query.append(term.substring(0, propIndex+1))
.append('"') .append('"')
.append(term.substring(propIndex+1)) .append(term.substring(propIndex+1));
.append('"'); if(propIndex > 0)
{
query.append('"');
}
else
{
query.append("*\"");
}
} }
else else
{ {
@@ -595,13 +607,9 @@ public final class People extends BaseScopableProcessorExtension implements Init
if (nonFtsTokens == 1) if (nonFtsTokens == 1)
{ {
// simple search: first name, last name and username starting with term // simple search: first name, last name and username starting with term
query.append("(firstName:\""); query.append("_PERSON:\"");
query.append(term); query.append(term);
query.append("*\" OR lastName:\""); query.append("*\" ");
query.append(term);
query.append("*\" OR userName:\"");
query.append(term);
query.append("*\") ");
} }
else else
{ {