Class MinShouldMatchSumScorer


final class MinShouldMatchSumScorer extends Scorer
A Scorer for BooleanQuery when minShouldMatch is between 2 and the total number of clauses. This implementation keeps sub scorers in 3 different places: - lead: a linked list of scorer that are positioned on the desired doc ID - tail: a heap that contains at most minShouldMatch - 1 scorers that are behind the desired doc ID. These scorers are ordered by cost so that we can advance the least costly ones first. - head: a heap that contains scorers which are beyond the desired doc ID, ordered by doc ID in order to move quickly to the next candidate. Finding the next match consists of first setting the desired doc ID to the least entry in 'head' and then advance 'tail' until there is a match.
  • Field Details

    • minShouldMatch

      final int minShouldMatch
    • lead

    • doc

      int doc
    • freq

      int freq
    • tail

      final DisiWrapper[] tail
    • tailSize

      int tailSize
    • cost

      final long cost
  • Constructor Details

    • MinShouldMatchSumScorer

      MinShouldMatchSumScorer(Weight weight, Collection<Scorer> scorers, int minShouldMatch)
  • Method Details

    • getChildren

      public final Collection<Scorable.ChildScorable> getChildren() throws IOException
      Description copied from class: Scorable
      Returns child sub-scorers positioned on the current document
      Overrides:
      getChildren in class Scorable
      Throws:
      IOException
    • iterator

      public DocIdSetIterator iterator()
      Description copied from class: Scorer
      Return a DocIdSetIterator over matching documents. The returned iterator will either be positioned on -1 if no documents have been scored yet, DocIdSetIterator.NO_MORE_DOCS if all documents have been scored already, or the last document id that has been scored otherwise. The returned iterator is a view: calling this method several times will return iterators that have the same state.
      Specified by:
      iterator in class Scorer
    • twoPhaseIterator

      public TwoPhaseIterator twoPhaseIterator()
      Description copied from class: Scorer
      Optional method: Return a TwoPhaseIterator view of this Scorer. A return value of null indicates that two-phase iteration is not supported. Note that the returned TwoPhaseIterator's approximation must advance synchronously with the Scorer.iterator(): advancing the approximation must advance the iterator and vice-versa. Implementing this method is typically useful on Scorers that have a high per-document overhead in order to confirm matches. The default implementation returns null.
      Overrides:
      twoPhaseIterator in class Scorer
    • addLead

      private void addLead(DisiWrapper lead)
    • pushBackLeads

      private void pushBackLeads() throws IOException
      Throws:
      IOException
    • advanceTail

      private void advanceTail(DisiWrapper top) throws IOException
      Throws:
      IOException
    • advanceTail

      private void advanceTail() throws IOException
      Throws:
      IOException
    • setDocAndFreq

      private void setDocAndFreq()
      Reinitializes head, freq and doc from 'head'
    • doNext

      private int doNext() throws IOException
      Advance tail to the lead until there is a match.
      Throws:
      IOException
    • doNextCandidate

      private int doNextCandidate() throws IOException
      Move iterators to the tail until the cumulated size of lead+tail is greater than or equal to minShouldMath
      Throws:
      IOException
    • updateFreq

      private void updateFreq() throws IOException
      Advance all entries from the tail to know about all matches on the current doc.
      Throws:
      IOException
    • score

      public float score() throws IOException
      Description copied from class: Scorable
      Returns the score of the current document matching the query.
      Specified by:
      score in class Scorable
      Throws:
      IOException
    • getMaxScore

      public float getMaxScore(int upTo) throws IOException
      Description copied from class: Scorer
      Return the maximum score that documents between the last target that this iterator was shallow-advanced to included and upTo included.
      Specified by:
      getMaxScore in class Scorer
      Throws:
      IOException
    • docID

      public int docID()
      Description copied from class: Scorable
      Returns the doc ID that is currently being scored.
      Specified by:
      docID in class Scorable
    • insertTailWithOverFlow

      private DisiWrapper insertTailWithOverFlow(DisiWrapper s)
      Insert an entry in 'tail' and evict the least-costly scorer if full.
    • addTail

      private void addTail(DisiWrapper s)
      Add an entry to 'tail'. Fails if over capacity.
    • popTail

      private DisiWrapper popTail()
      Pop the least-costly scorer from 'tail'.
    • upHeapCost

      private static void upHeapCost(DisiWrapper[] heap, int i)
      Heap helpers
    • downHeapCost

      private static void downHeapCost(DisiWrapper[] heap, int size)