Merge r5985 from nihvivo-rel-1.1-maint: query string cleanup to prevent Lucene ParseExceptions

This commit is contained in:
rjy7 2010-09-30 18:41:12 +00:00
parent a83304b5b8
commit b510f53e1c
2 changed files with 18 additions and 3 deletions

View file

@ -282,12 +282,19 @@ public class AutocompleteController extends FreemarkerHttpServlet implements Sea
// of wildcard and non-wildcard queries. The query will look have only an implicit disjunction
// operator: e.g., +(name:tales name:tales*)
try {
Query query = parser.parse(querystr);
// Prevent org.apache.lucene.queryParser.ParseException:
// Cannot parse 'mary *': '*' or '?' not allowed as first character in WildcardQuery
// The * is redundant in this case anyway, so just remove it.
log.debug("Query string is '" + querystr + "'");
querystr = querystr.replaceAll("([\\s^])[?*]", "$1");
log.debug("Cleaned query string is '" + querystr + "'");
log.debug("Adding non-wildcard query for " + querystr);
Query query = parser.parse(querystr);
boolQuery.add(query, BooleanClause.Occur.SHOULD);
Query wildcardQuery = parser.parse(querystr + "*");
log.debug("Adding wildcard query for " + querystr);
Query wildcardQuery = parser.parse(querystr + "*");
boolQuery.add(wildcardQuery, BooleanClause.Occur.SHOULD);
log.debug("Name query is: " + boolQuery.toString());

View file

@ -278,7 +278,7 @@ public class PagedSearchController extends VitroHttpServlet implements Searcher{
request.getRequestDispatcher(Controllers.BASIC_JSP).forward(request,response);
} catch (Throwable e) {
log.error("SearchController.doGet(): " + e);
log.error("PagedSearchController.doGet(): " + e, e);
doSearchError(request, response, e.getMessage(), null);
return;
}
@ -440,6 +440,14 @@ public class PagedSearchController extends VitroHttpServlet implements Searcher{
return null;
}
QueryParser parser = getQueryParser(analyzer);
// Prevent org.apache.lucene.queryParser.ParseException:
// Cannot parse 'mary *': '*' or '?' not allowed as first character in WildcardQuery
// The * is redundant in this case anyway, so just remove it.
log.debug("Query string is '" + querystr + "'");
querystr = querystr.replaceAll("([\\s^])[?*]", "$1");
log.debug("Cleaned query string is '" + querystr + "'");
query = parser.parse(querystr);
String alpha = request.getParameter("alpha");