My use case is programmatically setting a query filter before executing the query. I have a search component in the /select first-components list. This component determines the filter query value and sets it in the process method. I pass in a custom param to trigger the filter creation
I grab the parms from the request SolrParams solrParams = rb.req.getParams(); I next create a collection called rawParams with Map<String, String[]> rawParams = SolrParams.toMultiMap(solrParams.toNamedList()); I create the structure to hold my filters and String[] filters = getFilter... and then assign the new params like this rawParams.put(CommonParams.FQ, filters); solrParams = new MultiMapSolrParams(rawParams); rb.req.setParams(solrParams); The filter returns only a subset of the documents matching the terms. In my test case its 2 out of 21 documents. The problem is the response is all 21 documents. I have a simple search component in the last-components list simply to set a breakpoint to see the query results. I have tried two alternate tests using the Solr Admin console. I first verified the filter query by directly pasting it in the fq field and it works ok. I got back the expected 2 documents. I next did the above and also included my custom params. And this worked. As expected, the SolarParms value of the req has a double entry for the filter. The values are identical. So without using the fq field in the Console, I can't determine why setting via the Solr parms with Commons.FQ key doesn't work. As a separate experiment, created a custom handler and with a custom component sub classing QueryComponent. I do the filter query setup as above and calling super.process(rb) works. But, I don't want to use a custom handler. Thanks in advance if anyone points out where my assumptions are wrong. Thanks, Steve