/// <summary> /// Advance to non excluded doc. /// <para/>On entry: /// <list type="bullet"> /// <item><description>reqScorer != null,</description></item> /// <item><description>exclScorer != null,</description></item> /// <item><description>reqScorer was advanced once via Next() or SkipTo() /// and reqScorer.Doc may still be excluded.</description></item> /// </list> /// Advances reqScorer a non excluded required doc, if any. </summary> /// <returns> <c>true</c> if there is a non excluded required doc. </returns> private int ToNonExcluded() { int exclDoc = exclDisi.DocID; int reqDoc = reqScorer.DocID; // may be excluded do { if (reqDoc < exclDoc) { return(reqDoc); // reqScorer advanced to before exclScorer, ie. not excluded } else if (reqDoc > exclDoc) { exclDoc = exclDisi.Advance(reqDoc); if (exclDoc == NO_MORE_DOCS) { exclDisi = null; // exhausted, no more exclusions return(reqDoc); } if (exclDoc > reqDoc) { return(reqDoc); // not excluded } } } while ((reqDoc = reqScorer.NextDoc()) != NO_MORE_DOCS); reqScorer = null; // exhausted, nothing left return(NO_MORE_DOCS); }
private int AdvanceToNextCommonDoc() { for (; ;) { if (m_secondaryDoc < m_primaryDoc) { m_secondaryDoc = secondary.Advance(m_primaryDoc); } else if (m_secondaryDoc == m_primaryDoc) { return(m_primaryDoc); } else { m_primaryDoc = primary.Advance(m_secondaryDoc); } } }
public override Explanation Explain(AtomicReaderContext ir, int i) { Explanation inner = weight.Explain(ir, i); Filter f = outerInstance.filter; DocIdSet docIdSet = f.GetDocIdSet(ir, ir.AtomicReader.LiveDocs); DocIdSetIterator docIdSetIterator = docIdSet == null?DocIdSetIterator.GetEmpty() : docIdSet.GetIterator(); if (docIdSetIterator == null) { docIdSetIterator = DocIdSetIterator.GetEmpty(); } if (docIdSetIterator.Advance(i) == i) { return(inner); } else { Explanation result = new Explanation(0.0f, "failure to match filter: " + f.ToString()); result.AddDetail(inner); return(result); } }
public override int Advance(int target) { doc = m_innerIter.Advance(target); if (doc != NO_MORE_DOCS) { if (Match(doc)) { return(doc); } else { while ((doc = m_innerIter.NextDoc()) != NO_MORE_DOCS) { if (Match(doc)) { return(doc); } } return(doc); } } return(doc); }
public override int Advance(int target) { return(docIdSetIterator.Advance(target)); }