Vous devez urlencode certains caractères dans la requête Solr pour répondre UTF8 normes et + (plus) est l'un d'entre eux , ainsi que l'espace, etc. supports
choses à encode sont:
Space => +
+ => %2B
(=> %28
) => %29
et ainsi de suite, vous pouvez voir un exemple d'une URL encodée sur le site SOLR: https://wiki.apache.org/solr/SolrQuerySyntax
Essayez:
str_replace(array('+','(',')',' '), array('%2B','%28','%29','+'), '+field1:* (field2:1 field2:10) -(field3:value1 field3:value2)');
Cela devrait vous donner:
%2Bfield1:*+%2B%28field2:1+field2:10%29+-%28field3:value1+field3:value2%29
Si votre défaut L'opération de l'analyseur de requêtes est définie sur OU, puis tout espace entre les champs sera interprété comme un opérateur OR
.
Le résultat ci-dessus est loin d'être propre & lisible, mais il est une chaîne UTF8 correctement formaté qui Solr vous oblige à lui passer. Vous remarquerez la différence dès que vous l'exécutez.
Pourquoi str_replace au lieu d'urlencode? Eh bien, vous pouvez utiliser urlencode car il va correctement formater la chaîne en UTF8 mais il peut formater certains composants de chaîne qui n'ont pas besoin d'être codés.
qu'avez-vous l'intention d'interroger avec 'field1: *'? –
Veuillez cocher l'une des réponses acceptées, ou mentionner pourquoi aucune d'entre elles ne correspond à vos besoins. – dotancohen