: 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