需求:
MongoDB或者Solr引擎在查询数据的时候,如果存在特殊字符(?$.[等),查询不出数据或者查询出来的数据是不准确的,这个时候就需要对特殊字符进行转义。
核心代码如下:
/**
* solr检索时,转换特殊字符
*
* @param s 需要转义的字符串
* @return 返回转义后的字符串
*/
public static String escapeQueryChars(String s) {
if (StringUtils.isBlank(s)) {
return s;
}
StringBuilder sb = new StringBuilder();
//查询字符串一般不会太长,挨个遍历也花费不了多少时间
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// These characters are part of the query syntax and must be escaped
if (c == '\\' || c == '+' || c == '-' || c == '!' || c == '(' || c == ')'
|| c == ':' || c == '^' || c == '[' || c == ']' || c == '\"'
|| c == '{' || c == '}' || c == '~' || c == '*' || c == '?'
|| c == '|' || c == '&' || c == ';' || c == '/' || c == '.'
|| c == '$' || Character.isWhitespace(c)) {
sb.append('\\');
}
sb.append(c);
}
return sb.toString();
}