Hi Hoss,

Thanks for the pointers, and sorry, it was a bug in my code (was some dead code 
which was alphabetizing the facet link text and also the parameters themselves 
indirectly by reference).

I actually ended up building a servlet and a component to print out the 
multi-valued parameters using HttpServletRequest.getParameterValues("myparam") 
and ResponseBuilder.req.getParams().getParams("myparam") respectively to 
isolate the problem. Both of them returned the parameters in the correct order.

So I went trolling through the code with a debugger, to observe exactly at what 
point the order got messed up, and found the bug.

FWIW, I am using Tomcat 5.5.

Thanks to everybody for their help, and sorry for the noise, guess I should 
have done the debugger thing before I threw up my hands :-).

-sujit

On Mar 19, 2012, at 6:55 PM, Chris Hostetter wrote:

> 
> : I have a custom component which depends on the ordering of a 
> : multi-valued parameter. Unfortunately it looks like the values do not 
> : come back in the same order as they were put in the URL. Here is some 
> : code to explain the behavior:
>       ...
> : and I notice that the values are ordered differently than ["foo", "bar", 
> : "baz"] that I would have expected. I am guessing its because the 
> : SolrParams is a MultiMap structure, so order is destroyed on its way in.
> 
> a) MultiMapSolrParams does not destroy order on the way in
> b) when dealing with HTTP requests, the request params actaully use an 
> instance of ServletSolrParams which is backed directly by the 
> ServletRequest.getParameterMap() -- you should get the values returned in 
> the exact order as ServletRequest.getParameterMap().get("myparam")
> 
> : 1) is there a setting in Solr can use to enforce ordering of 
> : multi-valued parameters? I suppose I could use a single parameter with 
> : comma-separated values, but its a bit late to do that now...
> 
> Should already be enforced in MultiMapSolrParams and ServletSolrParams
> 
> : 2) is it possible to use a specific SolrParams object that preserves order? 
> If so how?
> 
> see above.
> 
> : 3) is it possible to get a reference to the HTTP request object from within 
> a component? If so how?
> 
> not out of the box, because there is no garuntee that solr is even running 
> in a servlet container. you can subclass SolrDispatchFilter to do this if 
> you wish (note the comment in the execute() method).
> 
> My questions to you...
> 
> 1) what servlet container are you using? 
> 2) have you tested your servlet 
> container with a simple servlet (ie: eliminate solr from the equation) to 
> verify that the ServletRequest.getParameterMap() contains your request 
> values in order?
> 
> 
> if you debug this and find evidence that something in solr is re-ordering 
> the values in a MultiMapSolrParams or ServletSolrParams *PLEASE* open a 
> jira with a reproducable example .. that would definitley be an anoying 
> bug we should get to the bottom of.
> 
> 
> -Hoss

Reply via email to