Пример #1
0
        /// <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);
        }
Пример #2
0
 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);
         }
     }
 }
Пример #3
0
            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);
                }
            }
Пример #4
0
 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);
 }
Пример #5
0
 public override int Advance(int target)
 {
     return(docIdSetIterator.Advance(target));
 }