/// <summary> /// Returns a DocIdSet with documents that should be permitted in search /// results. /// </summary> public override DocIdSet GetDocIdSet(AtomicReaderContext context, Bits acceptDocs) { SortedDocValues fcsi = FieldCache.DEFAULT.GetTermsIndex((context.AtomicReader), Query.field); // Cannot use FixedBitSet because we require long index (ord): LongBitSet termSet = new LongBitSet(fcsi.ValueCount); TermsEnum termsEnum = Query.GetTermsEnum(new TermsAnonymousInnerClassHelper(this, fcsi)); Debug.Assert(termsEnum != null); if (termsEnum.Next() != null) { // fill into a bitset do { long ord = termsEnum.Ord(); if (ord >= 0) { termSet.Set(ord); } } while (termsEnum.Next() != null); } else { return(null); } return(new FieldCacheDocIdSetAnonymousInnerClassHelper(this, context.Reader.MaxDoc, acceptDocs, fcsi, termSet)); }
public virtual void TestNoOrds() { Directory dir = NewDirectory(); RandomIndexWriter iw = new RandomIndexWriter(Random(), dir, Similarity, TimeZone); Document doc = new Document(); FieldType ft = new FieldType(TextField.TYPE_NOT_STORED); ft.StoreTermVectors = true; doc.Add(new Field("foo", "this is a test", ft)); iw.AddDocument(doc); AtomicReader ir = GetOnlySegmentReader(iw.Reader); Terms terms = ir.GetTermVector(0, "foo"); Assert.IsNotNull(terms); TermsEnum termsEnum = terms.Iterator(null); Assert.AreEqual(TermsEnum.SeekStatus.FOUND, termsEnum.SeekCeil(new BytesRef("this"))); try { termsEnum.Ord(); Assert.Fail(); } catch (System.NotSupportedException expected) { // expected exception } try { termsEnum.SeekExact(0); Assert.Fail(); } catch (System.NotSupportedException expected) { // expected exception } ir.Dispose(); iw.Dispose(); dir.Dispose(); }