Class HitQueue

All Implemented Interfaces:
Iterable<ScoreDoc>

public final class HitQueue extends PriorityQueue<ScoreDoc>
Expert: Priority queue containing hit docs
NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
  • Constructor Details

    • HitQueue

      public HitQueue(int size, boolean prePopulate)
      Creates a new instance with size elements. If prePopulate is set to true, the queue will pre-populate itself with sentinel objects and set its PriorityQueue.size() to size. In that case, you should not rely on PriorityQueue.size() to get the number of actual elements that were added to the queue, but keep track yourself.
      NOTE: in case prePopulate is true, you should pop elements from the queue using the following code example:
       PriorityQueue<ScoreDoc> pq = new HitQueue(10, true); // pre-populate.
       ScoreDoc top = pq.top();
      
       // Add/Update one element.
       top.score = 1.0f;
       top.doc = 0;
       top = (ScoreDoc) pq.updateTop();
       int totalHits = 1;
      
       // Now pop only the elements that were *truly* inserted.
       // First, pop all the sentinel elements (there are pq.size() - totalHits).
       for (int i = pq.size() - totalHits; i > 0; i--) pq.pop();
      
       // Now pop the truly added elements.
       ScoreDoc[] results = new ScoreDoc[totalHits];
       for (int i = totalHits - 1; i >= 0; i--) {
         results[i] = (ScoreDoc) pq.pop();
       }
       

      NOTE: This class pre-allocate a full array of length size.

      Parameters:
      size - the requested size of this queue.
      prePopulate - specifies whether to pre-populate the queue with sentinel values.
  • Method Details

    • lessThan

      protected final boolean lessThan(ScoreDoc hitA, ScoreDoc hitB)
      Description copied from class: PriorityQueue
      Determines the ordering of objects in this priority queue. Subclasses must define this one method.
      Specified by:
      lessThan in class PriorityQueue<ScoreDoc>
      Returns:
      true iff parameter a is less than parameter b.