Essentially, this is what I want to do (I'm extending SearchComponent): @Override public void process(ResponseBuilder rb) throws IOException { final SolrQueryRequest req = rb.req; final MultiMapSolrParams requestParams = SolrRequestParsers.parseQueryString(req.getParamString()); final SolrParams allParams = req.getParams(); final SolrParams defaultParams = allParams - requestParams; req.setParams(defaultParams + transformToSolrParams(requestParams)); }
where allParams - requestParams will give me default,append,invariant query params. And, I manually transform requestParams to proper SolrParams, and sum them up with defaultParams. On Tue, Apr 10, 2012 at 11:46 AM, sam ” <skyn...@gmail.com> wrote: > I would like to transform the following: > > /myhandler/?colors=red&colors=blue&materials=leather > > to a Query that is similar to: > /select/?fq:colors:(red OR > blue)&fq:materials:leather&facet=on&facet.field=.... and various default > query params. > > I tried to do this by providing QParserPlugin: > <queryParser name="myQueryParser" class="my.QueryParserPlugin"/> > <requestHandler name="/myhandler" class="solr.SearchHandler"> > <lst name="defaults"> > <!-- various default params --> > <str name="defType">myQueryParser</str> > </lst> > </requestHandler> > > > In my.QueryParser (returned by my.QueryParserPlugin) I can: > getReq().getParamString(); > > and parse that string to get non-default SolrParams. > And, build a Query object to my liking. > > Am I going about the right direction? It'd be much easier if I could > place a custom app proxying solr... But, I am required to expose solr to > the public without middle layer between the browsers and solr. > > So, my idea is to reject all solr query params but handful of custom > params such as colors, materials, .. and build a Query object myself > combining with default SolrParams specified in solrconfig.xml . > > Is this feasible? I don't really like to parse query string myself > (returned by getReq().getParamString()) .. > getReq().getParams() returns DefaultSolrParams, which does provide a way > to get non-default params only. > > > >