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