使用特殊字符进行Solr查询

时间:2012-07-23 03:16:43

标签: solr

我的查询键中存在一个'#'字符,如下所示:

17\#30\#36\#94\#35

因此,查询网址将生成为:http://10.251.25.12:8080/commentindex/comment/select?q=17\#30\#36\#94\#35&rows=200&wt=json。你可以看到,由于'#'存在,url会在发送到服务器之前被截断,我将得到错误结果,错误行数,错误文档类型(不是我设置的json)。

对于上面的例子,我将网址编码为http://10.251.25.12:8080/commentindex/comment/select?q=17%5c%2330%5c%2336%5c%2394%5c%2335&rows=200&wt=json。一切都如我所料。但是,如果查询键如下所示,我会遇到另一个错误:

←\~\\(≧▽≦\)\/\~!!|

Url将生成为:

http://10.251.25.12:8080/commentindex/comment/select?q=%e2%86%90%5c%7e%5c%5c(%e2%89%a7%e2%96%bd%e2%89%a6%5c)%5c%2f%5c%7e%ef%bc%81%ef%bc%81%7c&rows=200&wt=json

你找到了括号吗?它是solr查询中的特殊字符!我将从网址获得400个错误请求。

我注意到所有查询键都已使用'\'进行转义,所以如果我不编码整个网址并且只编码'#'char?我应该注意还有其他特殊的字符吗?

1 个答案:

答案 0 :(得分:2)

这些是Lucene / Solr中的特殊字符:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

当然还有像#这样在URL中具有特殊含义的字符。如果你想在上面搜索任何文字字符,你必须逃避它。此列表来自http://lucene.apache.org/core/3_6_0/queryparsersyntax.html#Escaping%20Special%20Characters