1

我的查询键中有一个“#”字符,如下所示:

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

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

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

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

网址将生成为:

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 查询中的特殊字符!我会从 url 得到 400 错误请求。

我注意到所有查询键都用'\'转义了,所以如果我不应该编码整个url而只编码'#'字符?还有其他我应该注意的特殊字符吗?

4

1 回答 1

3

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

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

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

于 2012-07-23T06:02:42.960 回答