protected internal override sealed bool MatchDoc(int doc) { int ord = fcsi.GetOrd(doc); if (ord == -1) { return(false); } return(termSet.Get(ord)); }
protected internal override sealed bool MatchDoc(int doc) { docTermOrds.SetDocument(doc); long ord; // TODO: we could track max bit set and early terminate (since they come in sorted order) while ((ord = docTermOrds.NextOrd()) != SortedSetDocValues.NO_MORE_ORDS) { if (termSet.Get(ord)) { return true; } } return false; }
/// <summary> /// Returns a <see cref="DocIdSet"/> with documents that should be permitted in search /// results. /// </summary> public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) { SortedSetDocValues docTermOrds = FieldCache.DEFAULT.GetDocTermOrds((context.AtomicReader), m_query.m_field); // Cannot use FixedBitSet because we require long index (ord): Int64BitSet termSet = new Int64BitSet(docTermOrds.ValueCount); TermsEnum termsEnum = m_query.GetTermsEnum(new TermsAnonymousInnerClassHelper(docTermOrds)); if (Debugging.AssertsEnabled) { Debugging.Assert(termsEnum != null); } if (termsEnum.MoveNext()) { // fill into a bitset do { termSet.Set(termsEnum.Ord); } while (termsEnum.MoveNext()); } else { return(null); } return(new FieldCacheDocIdSet(context.Reader.MaxDoc, acceptDocs, (doc) => { docTermOrds.SetDocument(doc); long ord; // TODO: we could track max bit set and early terminate (since they come in sorted order) while ((ord = docTermOrds.NextOrd()) != SortedSetDocValues.NO_MORE_ORDS) { if (termSet.Get(ord)) { return true; } } return false; })); }
/// <summary> /// Returns a DocIdSet with documents that should be permitted in search /// results. /// </summary> public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) { SortedDocValues fcsi = FieldCache.DEFAULT.GetTermsIndex((context.AtomicReader), m_query.m_field); // Cannot use FixedBitSet because we require long index (ord): Int64BitSet termSet = new Int64BitSet(fcsi.ValueCount); TermsEnum termsEnum = m_query.GetTermsEnum(new TermsAnonymousInnerClassHelper(fcsi)); if (Debugging.AssertsEnabled) { Debugging.Assert(termsEnum != null); } if (termsEnum.MoveNext()) { // fill into a bitset do { long ord = termsEnum.Ord; if (ord >= 0) { termSet.Set(ord); } } while (termsEnum.MoveNext()); } else { return(null); } return(new FieldCacheDocIdSet(context.Reader.MaxDoc, acceptDocs, (doc) => { int ord = fcsi.GetOrd(doc); if (ord == -1) { return false; } return termSet.Get(ord); })); }
protected override AcceptStatus Accept(BytesRef term) { return(liveTerms.Get(Ord) ? AcceptStatus.YES : AcceptStatus.NO); }