solr 查询过滤特殊字符

solr查询的时候报错,原因是关键词中存在特殊字符引起的

2021-08-27 13:42:33,274 [XNIO-2 task-1] ERROR o.a.s.c.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:1167) - Request to collection iask-question failed due to (400) org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://xxxxxxxx:xxxx/solr/iask-question: org.apache.solr.search.SyntaxError: Cannot parse 'content: ': Encountered "<EOF>" at line 1, column 9.
Was expecting one of:
    <BAREOPER> ...
    "(" ...
    "*" ...
    <QUOTED> ...
    <TERM> ...
    <PREFIXTERM> ...
    <WILDTERM> ...
    <REGEXPTERM> ...
    "[" ...
    "{" ...
    <LPARAMS> ...
    "filter(" ...
    <NUMBER> ...
    , retry? 0

解决方法,在查询之前先把关键词转义一次

	/**
	 * 过滤lucence的特殊字符     
	 * lucence特殊字符有  + - && || ! ( ) { } [ ] ^ " ~ * ? : \ /  外加空格
	 * @param s
	 * @return
	 */
	public static String escapeQueryChars(String 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 == ' '){
	    	  continue;
	      }
	      sb.append(c);
	    }
		//连续多个空格替换成1个空格  空格前面加斜杠
	    String result = sb.toString().replaceAll("\\s{1,}", "\\\\ ");  
	    return result;
	  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值