Merge r5985 from nihvivo-rel-1.1-maint: query string cleanup to prevent Lucene ParseExceptions
This commit is contained in:
parent
a83304b5b8
commit
b510f53e1c
2 changed files with 18 additions and 3 deletions
|
@ -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
|
// of wildcard and non-wildcard queries. The query will look have only an implicit disjunction
|
||||||
// operator: e.g., +(name:tales name:tales*)
|
// operator: e.g., +(name:tales name:tales*)
|
||||||
try {
|
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);
|
log.debug("Adding non-wildcard query for " + querystr);
|
||||||
|
Query query = parser.parse(querystr);
|
||||||
boolQuery.add(query, BooleanClause.Occur.SHOULD);
|
boolQuery.add(query, BooleanClause.Occur.SHOULD);
|
||||||
|
|
||||||
Query wildcardQuery = parser.parse(querystr + "*");
|
|
||||||
log.debug("Adding wildcard query for " + querystr);
|
log.debug("Adding wildcard query for " + querystr);
|
||||||
|
Query wildcardQuery = parser.parse(querystr + "*");
|
||||||
boolQuery.add(wildcardQuery, BooleanClause.Occur.SHOULD);
|
boolQuery.add(wildcardQuery, BooleanClause.Occur.SHOULD);
|
||||||
|
|
||||||
log.debug("Name query is: " + boolQuery.toString());
|
log.debug("Name query is: " + boolQuery.toString());
|
||||||
|
|
|
@ -278,7 +278,7 @@ public class PagedSearchController extends VitroHttpServlet implements Searcher{
|
||||||
|
|
||||||
request.getRequestDispatcher(Controllers.BASIC_JSP).forward(request,response);
|
request.getRequestDispatcher(Controllers.BASIC_JSP).forward(request,response);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
log.error("SearchController.doGet(): " + e);
|
log.error("PagedSearchController.doGet(): " + e, e);
|
||||||
doSearchError(request, response, e.getMessage(), null);
|
doSearchError(request, response, e.getMessage(), null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -440,6 +440,14 @@ public class PagedSearchController extends VitroHttpServlet implements Searcher{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
QueryParser parser = getQueryParser(analyzer);
|
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);
|
query = parser.parse(querystr);
|
||||||
|
|
||||||
String alpha = request.getParameter("alpha");
|
String alpha = request.getParameter("alpha");
|
||||||
|
|
Loading…
Add table
Reference in a new issue