: Date: Tue, 16 Jun 2009 20:38:24 +0530
: From: Avlesh Singh
: Subject: Re: Query parameter encode issue

: > qryString = "+text:test +site_id:(4 ) +publishDate:[2008-05-01T00\:00\:00Z
: > TO 2009-06-30T00\:00\:00Z]";
: > URLEncoder.encode(qryString, "UTF-8");
: >
: 
: You don't have to encode the complete query string parameter. You just need
: encode the values for individual query paramters.
: So it should be more like qryString = "+text:" + URLEncoder.encode("test",
: "UTF-8") ... and so on.

FWIW: I consider this to be *VERY* bad advice ... in may work in some 
cases, but not in all cases -- in this particular case for example, the 
"+" sign that is part of the query string (and intended to mean 
"mandatory" will be left unescaped and will be treated by the webserver as 
an escaped " " (space) character.

: > I am having the following query,
: > q=+text:test +site_id:(4 ) +publishDate:[2008-05-01T00\:00\:00Z TO
: > 2009-06-30T00\:00\:00Z]
        ...
: > In my developed solr client, I am using the following code to encode,
: >
: > qryString = "+text:test +site_id:(4 ) +publishDate:[2008-05-01T00\:00\:00Z
: > TO 2009-06-30T00\:00\:00Z]";
: > URLEncoder.encode(qryString, "UTF-8");

First off: just because the URL you get in your browser looks 
different then the one produced by URLEncoder doesn't mean you actual 
have a problem ... URL encoding is not a 1-to-1 mapping, there are 
multiple ways things can be encoded (because there are multiple ways 
to encode certain characters *and* there are some characters that can be 
encoded but don't have to be).  the question is: do you have a problem?  
does your search work? do you get an error message of some kind?  what 
made you send this email in which the only question is "what mistake I 
have done here?" but where you have given no example of why you think you 
made a mistake.

Second: what are you doing with the encoded qryString in your code?  if 
you are using a really low level HTTP api to embed it directly in a URL, 
then it's probably fine ... but if you are using a higher level HTTP 
Client library, you probably don't need to encode it yourself -- most 
client APIs have methods thta take in the *literal* param name and value, 
and the library takes care of encoding for you --- so it's possible your 
qryString is getting double encoded if you are using an API like that.

Third: even if you should be using URLEncoder directly with your HTTP 
Client library, using the "UTF-8" option on URLEncoder may not be correct 
.. it depends on how you have your serlvet container configured.


My suggestion: use SolrJ and make your life a lot easier.



-Hoss

Reply via email to