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.

Reply via email to