Woah, Mark…. you’re making a search request within a search component. Instead, let the built-in “query” component do the work for you.
I think one fix for you is to make your “components” be “first-components” instead (allowing the other default search components to come into play). You don’t need to search within your component, just affect parameters, right? — Erik Hatcher, Senior Solutions Architect http://www.lucidworks.com <http://www.lucidworks.com/> > On Jan 9, 2016, at 3:19 PM, Mark Robinson <mark123lea...@gmail.com> wrote: > > Hi, > > Ahmet, Jack, Thanks for the pointers. > My requirement is, I would not be having the facets or sort fields or its > order as static. > For example suppose for a particular scenario I need to show only 2 facets > and sort on only one field. > For another scenario I may have to do facet.field for a different set of > fields and sort on again another set of fields. > Consider there are some sort of user preferences for each query. > > So I think I may not be able to store my parameters like facet fields, sort > fields etc preconfigured in solrconfig.xml. > Please correct me if I am wrong. > > Based on Ahmet's reply I created a CustomSearchComponent with help from the > net. > I created a dummy RH and added this as the searchComponent in > SolrConfig.xml:- > <requestHandler name="/myexample" class="solr.SearchHandler"> > <arr name="components"> > <str>exampleComponent</str> > </arr> > </requestHandler> > > <searchComponent name="exampleComponent" > class="org.ExampleSearchComponent"> > </searchComponent> > > ..invoked it using:- > http://localhost:8984/solr/myexample?q=*:* > The o/p gave me that one record will ALL FIELDS fully in xml format. > *It did not give only the "id" field which was what I was trying as a test!* > > > my code for the custom Search Component shared below please:- > Before that I have these queries:- > 1. In my code,Instead of hitting the server AGAIN using SolrJ to enforce my > params (just "fl" newly added) , is there any way the query can be > executed with my additional fl param. > 2. Just adding the input additional params is what I want to achieve. I > dont want to do anything on the response. > Currently I am doing it:- > --> builder.rsp.add( "example", doc.getFields()); > Note:- I removed this line and again when I ran this query NO OUTPUT came. > So suppose I used it along with any of my existing RH by adding in > searchcomponent, I want it to only affect the input querying by adding > additional params and should not influence the rendering of the o/p in any > way. How do I add this to one of my existing Request Handlers only to > influence the input for querying and NOT o/p format in any way. > 3. Why is all fields being rendered for the one doc I selected to come back > in my "example" variable, when I am actually restricting the fields to > only &fl=id > > Any help is greatly appreciated. > > > My console shows the following ie ... looks like the filtering happens but > what is /select doing here when I am calling > /myexample:- > > 154956 [qtp1856056345-18] INFO org.apache.solr.core.SolrCore û > [collection1] w > ebapp=/solr path=*/select* params=*{q=*:*&fl=id&wt=xml&version=2.2}* hits=4 > status=0 > QTime=16 > [stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY,numericType=INT,numer > icPrecisionStep=16<id:205546699>, > org.apache.lucene.document.LazyDocument$LazyFi > eld@38585de9, org.apache.lucene.document.LazyDocument$LazyField@1b3edb96, > org.ap > ache.lucene.document.LazyDocument$LazyField@9692beb, > org.apache.lucene.document. > LazyDocument$LazyField@683f4dad, > org.apache.lucene.document.LazyDocument$LazyFie > ld@12f2e256, org.apache.lucene.document.LazyDocument$LazyField@7ffd69f5] > 155080 [qtp1856056345-21] INFO org.apache.solr.core.SolrCore û > [collection1] w > ebapp=/solr path=*/myexample* params={*q=*:**} status=0 QTime=299 > > > rough java class:- > > public class ExampleSearchComponent extends SearchComponent { > > @Override > public void prepare(ResponseBuilder builder) throws IOException { > > } > > @Override > public void process(ResponseBuilder builder) throws IOException { > SolrParams params = builder.req.getParams(); > String q = params.get(CommonParams.Q); > ModifiableSolrParams params1 = new ModifiableSolrParams(params); > params1.add("fl", "id"); > System.out.println("q is "+q); > > QueryResponse response=null; > > HttpSolrServer server = new HttpSolrServer( " > http://localhost:8984/solr/collection1" ); > server.setParser(new XMLResponseParser()); > > try{ > response = server.query( params1 ); > }catch(Exception e){} > > SolrDocumentList results = new SolrDocumentList(); > SolrIndexSearcher searcher = builder.req.getSearcher(); > Document doc=searcher.doc(0); > System.out.println(doc.getFields()); > > > builder.rsp.add( "example", doc.getFields()); > } > > > @Override > public String getDescription() { > return "ExampleSearchComponent"; > } > > @Override > public String getSource() { > return ""; > } > > //@Override > public String getSourceId() { > return ""; > } > > @Override > public String getVersion() { > return "1.0"; > } > } > > > > > > Thanks and Rgds, > Mark. > > On Sat, Jan 9, 2016 at 12:38 PM, Jack Krupansky <jack.krupan...@gmail.com> > wrote: > >> Sure, you CAN do this, but why would you want to? I mean, what exactly is >> the motivation here? If you truly have custom code to execute, fine, but if >> all you are trying to do is set parameters, a custom request handler is >> hitting a tack with a sledge hammer. For example, why isn't setting >> defaults in solrconfig sufficient for your needs? At least then you can >> change parameters with a simple text edit rather than require a Java build >> and jar deploy. >> >> Can you share what some of the requirements are for your custom request >> handler, including the motivation? I'd hate to see you go off and invest >> significant effort in a custom request handler when simpler techniques may >> suffice. >> >> -- Jack Krupansky >> >> On Sat, Jan 9, 2016 at 12:08 PM, Ahmet Arslan <iori...@yahoo.com.invalid> >> wrote: >> >>> Hi Mark, >>> >>> Yes this is possible. Better, you can use a custom SearchComponent for >>> this task too. >>> You retrieve solr parameters, wrap it into ModifiableSolrParams. Add >> extra >>> parameters etc, then pass it to underlying search components. >>> >>> Ahmet >>> >>> >>> On Saturday, January 9, 2016 3:59 PM, Mark Robinson < >>> mark123lea...@gmail.com> wrote: >>> Hi, >>> When I initially fire a query against my Solr instance using SOLRJ I pass >>> only, say q=*:*&fq=(myfield:vaue1). >>> >>> I have written a custom RequestHandler, which is what I call in my SolrJ >>> query. >>> Inside this custom request handler can I add more query params like say >> the >>> facets etc.. so that ultimately facets are also received back in my >> results >>> which were initially not specified when I invoked the Solr url using >> SolrJ. >>> >>> In short, instead of constructing the query dynamically initially in >> SolrJ >>> I want to add the extra query params, adding a jar in Solr (a java code >>> that will check certain conditions and dynamically add the query params >>> after the initial SolrJ query is done). That is why I thought of a custom >>> RH which would help we write a java class and deploy in Solr. >>> >>> Is this possible. Could some one get back please. >>> >>> Thanks! >>> Mark. >>> >>