public virtual void TestDocValuesIntegration() { AssumeTrue("3.x does not support docvalues", DefaultCodecSupportsDocValues()); Directory dir = NewDirectory(); IndexWriterConfig iwc = NewIndexWriterConfig(TEST_VERSION_CURRENT, null); RandomIndexWriter iw = new RandomIndexWriter(Random(), dir, iwc); Document doc = new Document(); doc.Add(new BinaryDocValuesField("binary", new BytesRef("binary value"))); doc.Add(new SortedDocValuesField("sorted", new BytesRef("sorted value"))); doc.Add(new NumericDocValuesField("numeric", 42)); if (DefaultCodecSupportsSortedSet()) { doc.Add(new SortedSetDocValuesField("sortedset", new BytesRef("sortedset value1"))); doc.Add(new SortedSetDocValuesField("sortedset", new BytesRef("sortedset value2"))); } iw.AddDocument(doc); DirectoryReader ir = iw.Reader; iw.Dispose(); AtomicReader ar = GetOnlySegmentReader(ir); BytesRef scratch = new BytesRef(); // Binary type: can be retrieved via getTerms() try { FieldCache_Fields.DEFAULT.GetInts(ar, "binary", false); Assert.Fail(); } catch (InvalidOperationException expected) { } BinaryDocValues binary = FieldCache_Fields.DEFAULT.GetTerms(ar, "binary", true); binary.Get(0, scratch); Assert.AreEqual("binary value", scratch.Utf8ToString()); try { FieldCache_Fields.DEFAULT.GetTermsIndex(ar, "binary"); Assert.Fail(); } catch (InvalidOperationException expected) { } try { FieldCache_Fields.DEFAULT.GetDocTermOrds(ar, "binary"); Assert.Fail(); } catch (InvalidOperationException expected) { } try { new DocTermOrds(ar, null, "binary"); Assert.Fail(); } catch (InvalidOperationException expected) { } Bits bits = FieldCache_Fields.DEFAULT.GetDocsWithField(ar, "binary"); Assert.IsTrue(bits.Get(0)); // Sorted type: can be retrieved via getTerms(), getTermsIndex(), getDocTermOrds() try { FieldCache_Fields.DEFAULT.GetInts(ar, "sorted", false); Assert.Fail(); } catch (InvalidOperationException expected) { } try { new DocTermOrds(ar, null, "sorted"); Assert.Fail(); } catch (InvalidOperationException expected) { } binary = FieldCache_Fields.DEFAULT.GetTerms(ar, "sorted", true); binary.Get(0, scratch); Assert.AreEqual("sorted value", scratch.Utf8ToString()); SortedDocValues sorted = FieldCache_Fields.DEFAULT.GetTermsIndex(ar, "sorted"); Assert.AreEqual(0, sorted.GetOrd(0)); Assert.AreEqual(1, sorted.ValueCount); sorted.Get(0, scratch); Assert.AreEqual("sorted value", scratch.Utf8ToString()); SortedSetDocValues sortedSet = FieldCache_Fields.DEFAULT.GetDocTermOrds(ar, "sorted"); sortedSet.Document = 0; Assert.AreEqual(0, sortedSet.NextOrd()); Assert.AreEqual(SortedSetDocValues.NO_MORE_ORDS, sortedSet.NextOrd()); Assert.AreEqual(1, sortedSet.ValueCount); bits = FieldCache_Fields.DEFAULT.GetDocsWithField(ar, "sorted"); Assert.IsTrue(bits.Get(0)); // Numeric type: can be retrieved via getInts() and so on Ints numeric = FieldCache_Fields.DEFAULT.GetInts(ar, "numeric", false); Assert.AreEqual(42, numeric.Get(0)); try { FieldCache_Fields.DEFAULT.GetTerms(ar, "numeric", true); Assert.Fail(); } catch (InvalidOperationException expected) { } try { FieldCache_Fields.DEFAULT.GetTermsIndex(ar, "numeric"); Assert.Fail(); } catch (InvalidOperationException expected) { } try { FieldCache_Fields.DEFAULT.GetDocTermOrds(ar, "numeric"); Assert.Fail(); } catch (InvalidOperationException expected) { } try { new DocTermOrds(ar, null, "numeric"); Assert.Fail(); } catch (InvalidOperationException expected) { } bits = FieldCache_Fields.DEFAULT.GetDocsWithField(ar, "numeric"); Assert.IsTrue(bits.Get(0)); // SortedSet type: can be retrieved via getDocTermOrds() if (DefaultCodecSupportsSortedSet()) { try { FieldCache_Fields.DEFAULT.GetInts(ar, "sortedset", false); Assert.Fail(); } catch (InvalidOperationException expected) { } try { FieldCache_Fields.DEFAULT.GetTerms(ar, "sortedset", true); Assert.Fail(); } catch (InvalidOperationException expected) { } try { FieldCache_Fields.DEFAULT.GetTermsIndex(ar, "sortedset"); Assert.Fail(); } catch (InvalidOperationException expected) { } try { new DocTermOrds(ar, null, "sortedset"); Assert.Fail(); } catch (InvalidOperationException expected) { } sortedSet = FieldCache_Fields.DEFAULT.GetDocTermOrds(ar, "sortedset"); sortedSet.Document = 0; Assert.AreEqual(0, sortedSet.NextOrd()); Assert.AreEqual(1, sortedSet.NextOrd()); Assert.AreEqual(SortedSetDocValues.NO_MORE_ORDS, sortedSet.NextOrd()); Assert.AreEqual(2, sortedSet.ValueCount); bits = FieldCache_Fields.DEFAULT.GetDocsWithField(ar, "sortedset"); Assert.IsTrue(bits.Get(0)); } ir.Dispose(); dir.Dispose(); }
private void CheckTermsOrder(IndexReader r, ISet<string> allTerms, bool isTop) { TermsEnum terms = MultiFields.GetFields(r).Terms("f").Iterator(null); BytesRef last = new BytesRef(); HashSet<string> seenTerms = new HashSet<string>(); while (true) { BytesRef term = terms.Next(); if (term == null) { break; } Assert.IsTrue(last.CompareTo(term) < 0); last.CopyBytes(term); string s = term.Utf8ToString(); Assert.IsTrue(allTerms.Contains(s), "term " + TermDesc(s) + " was not added to index (count=" + allTerms.Count + ")"); seenTerms.Add(s); } if (isTop) { Assert.IsTrue(allTerms.SetEquals(seenTerms)); } // Test seeking: IEnumerator<string> it = seenTerms.GetEnumerator(); while (it.MoveNext()) { BytesRef tr = new BytesRef(it.Current); Assert.AreEqual(TermsEnum.SeekStatus.FOUND, terms.SeekCeil(tr), "seek failed for term=" + TermDesc(tr.Utf8ToString())); } }