You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by "Radha C." <cr...@ceiindia.com> on 2009/06/16 16:50:15 UTC

Query parameter encode issue

Hello list,
 
I am having the following query,
q=+text:test +site_id:(4 ) +publishDate:[2008-05-01T00\:00\:00Z TO
2009-06-30T00\:00\:00Z]
 
If I try this query in the browser directly , it is working fine and the url
is encoded automatically in the browser when I enter as follows
 
http://localhost:8983/solr/TeamSite/select?q=+text:test%20+site_id:(4%20)%20
+publishDate:[2008-05-01T00\:00\:00Z%20TO%202009-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");
 
and the encoded url is like this,
 
http://localhost:8983/solr/TeamSite/select?q=%2Btext%3Atest+%2Bsite_id%3A%28
4+%29+%2BpublishDate%3A%5B2008-05-01T00%5C%3A00%5C%3A00Z+TO+2009-06-30T00%5C
%3A00%5C%3A00Z%5D
 
I am just encoding the parameter value ( +text:test +site_id:(4 )
+publishDate:[2008-05-01T00\:00\:00Z TO 2009-06-30T00\:00\:00Z] ) and not
parameter name ( q=).
 
Can anyone please tell me what mistake I have done here?
 

RE: Query parameter encode issue

Posted by "Venkatesan A." <av...@ceiindia.com>.
What happens when u don't use encoding?


-----Original Message-----
From: Radha C. [mailto:cradha@ceiindia.com] 
Sent: Tuesday, June 16, 2009 8:20 PM
To: solr-user@lucene.apache.org
Subject: Query parameter encode issue

Hello list,
 
I am having the following query,
q=+text:test +site_id:(4 ) +publishDate:[2008-05-01T00\:00\:00Z TO
2009-06-30T00\:00\:00Z]
 
If I try this query in the browser directly , it is working fine and the url
is encoded automatically in the browser when I enter as follows
 
http://localhost:8983/solr/TeamSite/select?q=+text:test%20+site_id:(4%20)%20
+publishDate:[2008-05-01T00\:00\:00Z%20TO%202009-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");
 
and the encoded url is like this,
 
http://localhost:8983/solr/TeamSite/select?q=%2Btext%3Atest+%2Bsite_id%3A%28
4+%29+%2BpublishDate%3A%5B2008-05-01T00%5C%3A00%5C%3A00Z+TO+2009-06-30T00%5C
%3A00%5C%3A00Z%5D
 
I am just encoding the parameter value ( +text:test +site_id:(4 )
+publishDate:[2008-05-01T00\:00\:00Z TO 2009-06-30T00\:00\:00Z] ) and not
parameter name ( q=).
 
Can anyone please tell me what mistake I have done here?
 


Re: Query parameter encode issue

Posted by Chris Hostetter <ho...@fucit.org>.
: 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


RE: Query parameter encode issue

Posted by "Radha C." <cr...@ceiindia.com>.
 
Thanks for your reply.. 
 
If that is the case, I need to do as follows, 
 
"+text:" + URLEncoder.encode("test", "UTF-8") +URLEncoder.encode(" ",
"UTF-8")+"+site_id"+URLEncoder.encode(xxxxxx, "UTF-8") 
 
Do I need to encode the space between two search field also? It is difficult
for me to do like this because I am having many search fields and forming
the query string dynamically. 
 
Is there any other way I can do this? or else I will follow this then.
 
 

 
  _____  

From: Avlesh Singh [mailto:avlesh@gmail.com] 
Sent: Tuesday, June 16, 2009 8:38 PM
To: solr-user@lucene.apache.org; cradha@ceiindia.com
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.

Cheers
Avlesh


On Tue, Jun 16, 2009 at 8:20 PM, Radha C. <cr...@ceiindia.com> wrote:


Hello list,

I am having the following query,
q=+text:test +site_id:(4 ) +publishDate:[2008-05-01T00\:00\:00Z TO
2009-06-30T00\:00\:00Z]

If I try this query in the browser directly , it is working fine and the url
is encoded automatically in the browser when I enter as follows

http://localhost:8983/solr/TeamSite/select?q=+text:test%20+site_id:(4%20)%20
<http://localhost:8983/solr/TeamSite/select?q=+text:test%20+site_id:%284%20%
29%20%0A+publishDate:%5B2008-05-01T00> 
+publishDate:[2008-05-01T00\:00\:00Z%20TO%202009-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");

and the encoded url is like this,

http://localhost:8983/solr/TeamSite/select?q=%2Btext%3Atest+%2Bsite_id%3A%28
<http://localhost:8983/solr/TeamSite/select?q=%2Btext%3Atest+%2Bsite_id%3A%2
8%0A4+%29+%2BpublishDate%3A%5B2008-05-01T00%5C%3A00%5C%3A00Z+TO+2009-06-30T0
0%5C%0A%3A00%5C%3A00Z%5D> 
4+%29+%2BpublishDate%3A%5B2008-05-01T00%5C%3A00%5C%3A00Z+TO+2009-06-30T00%5C
%3A00%5C%3A00Z%5D

I am just encoding the parameter value ( +text:test +site_id:(4 )
+publishDate:[2008-05-01T00\:00\:00Z TO 2009-06-30T00\:00\:00Z] ) and not
parameter name ( q=).

Can anyone please tell me what mistake I have done here?





Re: Query parameter encode issue

Posted by Avlesh Singh <av...@gmail.com>.
>
> 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.

Cheers
Avlesh

On Tue, Jun 16, 2009 at 8:20 PM, Radha C. <cr...@ceiindia.com> wrote:

> Hello list,
>
> I am having the following query,
> q=+text:test +site_id:(4 ) +publishDate:[2008-05-01T00\:00\:00Z TO
> 2009-06-30T00\:00\:00Z]
>
> If I try this query in the browser directly , it is working fine and the
> url
> is encoded automatically in the browser when I enter as follows
>
>
> http://localhost:8983/solr/TeamSite/select?q=+text:test%20+site_id:(4%20)%20
> +publishDate:[2008-05-01T00<http://localhost:8983/solr/TeamSite/select?q=+text:test%20+site_id:%284%20%29%20%0A+publishDate:%5B2008-05-01T00>
> \:00\:00Z%20TO%202009-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");
>
> and the encoded url is like this,
>
>
> http://localhost:8983/solr/TeamSite/select?q=%2Btext%3Atest+%2Bsite_id%3A%28
>
> 4+%29+%2BpublishDate%3A%5B2008-05-01T00%5C%3A00%5C%3A00Z+TO+2009-06-30T00%5C
> %3A00%5C%3A00Z%5D<http://localhost:8983/solr/TeamSite/select?q=%2Btext%3Atest+%2Bsite_id%3A%28%0A4+%29+%2BpublishDate%3A%5B2008-05-01T00%5C%3A00%5C%3A00Z+TO+2009-06-30T00%5C%0A%3A00%5C%3A00Z%5D>
>
> I am just encoding the parameter value ( +text:test +site_id:(4 )
> +publishDate:[2008-05-01T00\:00\:00Z TO 2009-06-30T00\:00\:00Z] ) and not
> parameter name ( q=).
>
> Can anyone please tell me what mistake I have done here?
>
>