2012-07-23 3 views
1

Il y a un caractère « # » existe dans la clé de ma requête comme ci-dessous:requête Solr avec charaters spéciaux

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

Ainsi, une URL de requête sera généré: http://10.251.25.12:8080/commentindex/comment/select?q=17\#30\#36\#94\#35&rows=200&wt=json. Vous pouvez voir, l'URL sera tronquée avant d'envoyer au serveur en raison de '#' existant, et j'obtiendrai le résultat d'erreur, le nombre de lignes d'erreur, le type de document d'erreur (pas json I réglé).

Pour l'instance ci-dessus, j'ai codé l'URL en tant que http://10.251.25.12:8080/commentindex/comment/select?q=17%5c%2330%5c%2336%5c%2394%5c%2335&rows=200&wt=json. Tout va comme je m'y attends. Cependant, je rencontre une autre erreur si la clé de requête ressemblait à:

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

Url sera généré:

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 

-vous trouver les parenthèses? C'est un caractère spécial dans la requête solr! 400 mauvaise demande, je vais obtenir de l'URL.

J'ai remarqué que toute la clé de la requête a été échappée avec '\', donc si je ne devrais pas encoder l'URL entière et seulement encoder '#' char? Y a-t-il un autre personnage spécial que je devrais noter?

Répondre

2

Ce sont les caractères spéciaux dans Lucene/Solr:

et des caractères bien sûr comme # qui ont une signification particulière dans les URL. Si vous voulez rechercher un caractère littéral parmi ce qui précède, vous devez y échapper. Cette liste provient de http://lucene.apache.org/core/3_6_0/queryparsersyntax.html#Escaping%20Special%20Characters.

+0

N'oubliez pas que démarrer à partir de Lucene 4.0 "/" est aussi un caractère spécial (utiliser dans regex). –