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.
>>> 
>> 

Reply via email to