FileDocCategorySizeDatePackage
TopDocCollector.javaAPI DocApache Lucene 1.92560Mon Feb 20 09:20:04 GMT 2006org.apache.lucene.search

TopDocCollector

public class TopDocCollector extends HitCollector
A {@link HitCollector} implementation that collects the top-scoring documents, returning them as a {@link TopDocs}. This is used by {@link IndexSearcher} to implement {@link TopDocs}-based search.

This may be extended, overriding the collect method to, e.g., conditionally invoke super() in order to filter which documents are collected.

Fields Summary
private int
numHits
private float
minScore
int
totalHits
PriorityQueue
hq
Constructors Summary
public TopDocCollector(int numHits)
Construct to collect a given number of hits.

param
numHits the maximum number of hits to collect

    
                      
     
    this(numHits, new HitQueue(numHits));
  
TopDocCollector(int numHits, PriorityQueue hq)

    this.numHits = numHits;
    this.hq = hq;
  
Methods Summary
public voidcollect(int doc, float score)

    if (score > 0.0f) {
      totalHits++;
      if (hq.size() < numHits || score >= minScore) {
        hq.insert(new ScoreDoc(doc, score));
        minScore = ((ScoreDoc)hq.top()).score; // maintain minScore
      }
    }
  
public intgetTotalHits()
The total number of documents that matched this query.

 return totalHits; 
public org.apache.lucene.search.TopDocstopDocs()
The top-scoring hits.

    ScoreDoc[] scoreDocs = new ScoreDoc[hq.size()];
    for (int i = hq.size()-1; i >= 0; i--)      // put docs in array
      scoreDocs[i] = (ScoreDoc)hq.pop();
      
    float maxScore = (totalHits==0)
      ? Float.NEGATIVE_INFINITY
      : scoreDocs[0].score;
    
    return new TopDocs(totalHits, scoreDocs, maxScore);