目前我已在我的项目中开发了solr搜索。搜索是工作。但是当我放置一些像([] white space)这样的特殊字符时,我得到了例外。
Caused by: org.apache.lucene.queryParser.ParseException: Cannot parse 'searchable: ([])': Encountered " "]" "] "" at line 1, column 13.
Was expecting one of:
<RANGEIN_QUOTED> ...
<RANGEIN_GOOP> ...
at org.apache.lucene.queryParser.QueryParser.parse(QueryParser.java:211)
at org.apache.solr.search.LuceneQParser.parse(LuceneQParserPlugin.java:79)
at org.apache.solr.search.QParser.getQuery(QParser.java:143)
at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:105)
... 104 more
那么,我该如何处理这种情况呢。如何防止搜索框中的特殊字符。
答案 0 :(得分:8)
Solr / Lucene使用某些字符进行某些操作,例如: + - ! (){} [] ^“〜*?:
您需要使用反斜杠转义特殊字符。查看Escape Special Characters
答案 1 :(得分:1)
使用ClientUtils.escapeQueryChars(..)。如果您需要另外包装特殊单词,请使用
private static String regexp = "(^|\\s)(AND|OR|TO|NOT)($|\\s)";
private static Pattern pattern = Pattern.compile(regexp);
public static String wrap(String string) {
Matcher matcher = pattern.matcher(string);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
StringBuffer result = new StringBuffer();
if(matcher.start() > 0) {
result.append(" ");
}
result.append("\"");
result.append(matcher.group(2));
result.append("\"");
if(matcher.end() < string.length()) {
result.append(" ");
}
matcher.appendReplacement(sb, Matcher.quoteReplacement(result.toString()));
}
matcher.appendTail(sb);
return sb.toString();
}
答案 2 :(得分:0)
我通过实现ClientUtils.escapeQueryChars(q)解决了solr特殊字符的问题。对于空格,我实现了q.trim();现在我的问题还可以。
答案 3 :(得分:0)
我在searchterms
上专门搜索时遇到了一些问题所以我在将搜索发送到solr之前将其删除。