lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joel Bernstein <joels...@gmail.com>
Subject Re: How to tell when Collector finishes collect loop?
Date Wed, 03 Jun 2015 14:53:08 GMT
I think there are easier ways to do what you are trying to do.

Take a look at the Function query parser.

It will allow you to control the score for each document from within a
function query. The basic use case is this:

q={!func}myFunc()&fq=my+query

In this scenario the func qparser plugin controls the score and the fq
provides the query.






Joel Bernstein
http://joelsolr.blogspot.com/

On Wed, Jun 3, 2015 at 9:50 AM, adfel70 <adfel70@gmail.com> wrote:

> Hi guys, need your help (again):
> I have a search handler which need to override solr's scoring. I chose to
> implement it with RankQuery API, so when getTopDocsCollector() gets called
> it instantiates my TopDocsCollector instance, and every dicId gets its own
> score:
>
> public class MyScorerrankQuet extends RankQuery {
>         ...
>
>         @Override
>         public TopDocsCollector getTopDocsCollector(int i,
> SolrIndexerSearcher.QueryCommand cmd, IndexSearcher searcher) {
>                 ...
>                 return new MyCollector(...)
>         }
> }
>
> public class MyCollector  extends TopDocsCollector{
>         //Initialized in constrctor
>         MyScorer scorer;
>
>         public MyCollector(){
>                 scorer = new MyScorer();
>                 scorer.start();         //the scorer's API needs to call
> start() before every
> query and close() at the end of the query
>         }
>
>         @Override
>         public void collect(int id){
>                 //1. get specific field from the doc using DocValues and
> calculate score
> using my scorer
>                 //2. add docId and score (ScoreDoc object) into
> PriorityQueue.
>         }
> }
>
> My problem is that I cant find a place to call scorer.close(), which need
> to
> be executed when the query ends (after we calculated score for each docID).
> I saw the DeligatingCollector has finish() method which is called after
> collector is done, but I cannot extend both TopDocsCollector and
> DeligatingCollector...
>
>
>
>
>
> --
> View this message in context:
> http://lucene.472066.n3.nabble.com/How-to-tell-when-Collector-finishes-collect-loop-tp4209447.html
> Sent from the Solr - User mailing list archive at Nabble.com.
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message