Hi Joel,
many thanks for the response and sorry for this late reply.

About the first question, I can open a JIRA for that. Instead, for
disabling the component I think it would be useful to add

- an automatic behaviour: if the sort criteria excludes the score the
re-ranking could be automatically excluded
- a parameter / flag (something like *rr=true*) which enables / disables
the reranking. In this way such behaviour could be also driven on the
client side

What do you think? I guess this should be another JIRA

Best,
Andrea


On Fri, May 6, 2016 at 3:32 PM, Joel Bernstein <joels...@gmail.com> wrote:

> I would consider the NPE when sort by score is not included a bug. There is
> the work around, that you mentioned, which is to have a compound sort which
> includes score.
>
> The second issue though of disabling the ReRanker when someone doesn't
> include a sort by score, would be a new feature of the ReRanker. I think
> it's a good idea but it's not implemented yet.
>
> I'm not sure if anyone has any ideas about conditionally adding the
> ReRanker using configurations?
>
> Joel Bernstein
> http://joelsolr.blogspot.com/
>
> On Fri, May 6, 2016 at 4:10 AM, Andrea Gazzarini <gxs...@gmail.com> wrote:
>
> > Hi guys,
> > I have a Solr 4.10.4 instance with a RequestHandler that has a re-ranking
> > query configured like this:
> >
> > <lst name="defaults">
> >             <str name="defType">dismax</str>
> >             ...
> >             <str name="rqq">{!boost b=someFunction() v=$q}</str>
> >             <str name="rq">{!rerank reRankQuery=$rqq reRankDocs=60
> > reRankWeight=1.2}</str>
> >             <str name="sort">score desc</str>
> > </lst>
> >
> > Everything is working until the client sends a sort params that doesn't
> > include the score field. So if for example the request contains
> "sort=price
> > asc" then a NullPointerException is thrown:
> > /
> > //09:46:08,548 ERROR [org.apache.solr.core.SolrCore]
> > java.lang.NullPointerException//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.lucene.search.TopFieldCollector$OneComparatorScoringMaxScoreCollector.collect(TopFieldCollector.java:291)//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.solr.search.ReRankQParserPlugin$ReRankCollector.collect(ReRankQParserPlugin.java:263)//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.solr.search.SolrIndexSearcher.sortDocSet(SolrIndexSearcher.java:1999)//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1423)//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:514)//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:484)//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:218)//
> > //[INFO] [talledLocalContainer]     at
> >
> org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
> >
> > /The only way to avoid this exception is to _explicitly_ add th/e "score
> > desc" /value to the incoming field (i.e. sort=price asc, score desc). In
> > this way I get no exception. I said "explicitly" because adding an
> > "appends" section in my handler
> >
> > <lst name="appends">
> >     <str name="sort">score desc</str>
> > </lst>
> >
> > Even I don't know if that could solve my problem, in practice it is
> > completely ignoring (i.e. I'm still getting the NPE above).
> > However, when I explicitly add "sort=price asc, score desc", as
> > consequence of the re-ranking, the top 60 results, although I said to
> Solr
> > "order by price", are still shuffled and that's not what I want.
> >
> > On top of that I have two questions:
> >
> >  * Any idea about the exception above?
> >  * How can I disable the re-ranking query in case the order is not by
> >    score?
> >
> > About the second question, I'm thinking to the following solutions, but
> > I'm not sure if there's a better way to do that.
> >
> > 1. Create another request handler, which is basically a clone of the
> > handler above but without the re-ranking stuff
> > 2. Use local params for the reRankDocs...
> >
> > <lst name="defaults">
> >             <str name="defType">dismax</str>
> >             ...
> >             <str name="rqq">{!boost b=someFunction() v=$q}</str>
> >             <str name="rq">{!rerank reRankQuery=$rqq reRankDocs=*$rrd*
> > reRankWeight=1.2}</str>
> > *<str name="rrd">60</str>*
> >             <str name="sort">score desc</str>
> > </lst>
> >
> > ...and have (in case of sorting by something different from the score)
> the
> > client sending an additional params "rdd=0". This is working but I still
> > need to explicitly declare "sort=price asc, score desc"
> >
> > Any thoughts?
> >
> > Best,
> > Andrea
> >
> >
>

Reply via email to