3

目前我已经在我的项目中开发了 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

那么,我该如何处理这种情况。如何防止搜索框中的特殊字符。

4

4 回答 4

8

Solr/Lucene 使用某些字符进行某些操作,例如 + - !( ) { } [ ] ^ " ~ * ? :
您需要使用反斜杠转义特殊字符。检查Escape Special Characters

于 2013-05-20T09:45:59.300 回答
1

我通过实现 ClientUtils.escapeQueryChars(q) 解决了我的 solr 特殊字符问题。对于空白,我实现了 q.trim(); 现在我的问题好了。

于 2013-05-21T10:57:03.577 回答
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();
}
于 2015-11-19T21:27:30.647 回答
0

我对搜索词的搜索有一些问题

  • &&(双与字符)
  • || (双管道字符)

所以我在将搜索发送到 solr 之前删除它们。

于 2014-03-10T15:22:41.023 回答