NIHVIVO-779 Modify autocomplete controller to do tokenized or untokenized index. Autocomplete on add authors form uses untokenized index.

This commit is contained in:
rjy7 2010-07-12 15:08:33 +00:00
parent cc59f54794
commit 880a54c7f4

View file

@ -277,6 +277,9 @@ public class AutocompleteController extends FreeMarkerHttpServlet implements Sea
String stemParam = (String) request.getParameter("stem");
boolean stem = "true".equals(stemParam);
String tokenizeParam = (String) request.getParameter("stem");
boolean tokenize = "true".equals(tokenizeParam);
// The search index is lowercased
querystr = querystr.toLowerCase();
@ -288,9 +291,13 @@ public class AutocompleteController extends FreeMarkerHttpServlet implements Sea
Matcher m = p.matcher(querystr);
boolean lastTermIsWildcard = !m.find();
// RY We might also have a tokenize param. Then if tokenize is false, call a different
// method. Not sure yet.
// Stemming is only relevant if we are tokenizing. An untokenized name
// query will not stem.
if (tokenize) {
return makeTokenizedNameQuery(querystr, stem, lastTermIsWildcard);
} else {
return makeUntokenizedNameQuery(querystr);
}
}
private Query makeTokenizedNameQuery(String querystr, boolean stem, boolean lastTermIsWildcard) {
@ -342,6 +349,18 @@ public class AutocompleteController extends FreeMarkerHttpServlet implements Sea
return query;
}
private Query makeUntokenizedNameQuery(String querystr) {
String termName = Entity2LuceneDoc.term.NAMEUNANALYZED;
BooleanQuery query = new BooleanQuery();
log.debug("Adding wildcard query on unanalyzed name");
query.add(
new WildcardQuery(new Term(termName, querystr + "*")),
BooleanClause.Occur.MUST);
return query;
}
/**
* Makes a flag based query clause. This is where searches can filtered
* by portal.