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