private static Document Doc(int id, PositionsTokenStream positions) { Document doc = new Document(); doc.Add(new StringField(ID_FIELD, id.ToString(), Field.Store.YES)); doc.Add(new StringField(DOCS_ENUM_FIELD, DOCS_ENUM_TERM, Field.Store.NO)); positions.SetId(id); if (DoesntSupportOffsets.contains(TestUtil.GetPostingsFormat(DOC_POSITIONS_FIELD))) { // codec doesnt support offsets: just index positions for the field doc.Add(new Field(DOC_POSITIONS_FIELD, positions, TextField.TYPE_NOT_STORED)); } else { doc.Add(new Field(DOC_POSITIONS_FIELD, positions, POSITIONS_TYPE)); } doc.Add(new NumericDocValuesField(NUMERIC_DV_FIELD, id)); TextField norms = new TextField(NORMS_FIELD, id.ToString(), Field.Store.NO); norms.Boost = (Number.IntBitsToFloat(id)); doc.Add(norms); doc.Add(new BinaryDocValuesField(BINARY_DV_FIELD, new BytesRef(id.ToString()))); doc.Add(new SortedDocValuesField(SORTED_DV_FIELD, new BytesRef(id.ToString()))); if (DefaultCodecSupportsSortedSet()) { doc.Add(new SortedSetDocValuesField(SORTED_SET_DV_FIELD, new BytesRef(id.ToString()))); doc.Add(new SortedSetDocValuesField(SORTED_SET_DV_FIELD, new BytesRef((id + 1).ToString()))); } doc.Add(new Field(TERM_VECTORS_FIELD, id.ToString(), TERM_VECTORS_TYPE)); return(doc); }
public virtual void TestDocsAndPositionsEnum() { TermsEnum termsEnum = reader.Terms(DOC_POSITIONS_FIELD).Iterator(null); assertEquals(TermsEnum.SeekStatus.FOUND, termsEnum.SeekCeil(new BytesRef(DOC_POSITIONS_TERM))); DocsAndPositionsEnum sortedPositions = termsEnum.DocsAndPositions(null, null); int doc; // test nextDoc() while ((doc = sortedPositions.NextDoc()) != DocIdSetIterator.NO_MORE_DOCS) { int freq = sortedPositions.Freq(); assertEquals("incorrect freq for doc=" + doc, sortedValues[doc] / 10 + 1, freq); for (int i = 0; i < freq; i++) { assertEquals("incorrect position for doc=" + doc, i, sortedPositions.NextPosition()); if (!DoesntSupportOffsets.contains(TestUtil.GetPostingsFormat(DOC_POSITIONS_FIELD))) { assertEquals("incorrect startOffset for doc=" + doc, i, sortedPositions.StartOffset()); assertEquals("incorrect endOffset for doc=" + doc, i, sortedPositions.EndOffset()); } assertEquals("incorrect payload for doc=" + doc, freq - i, int.Parse(sortedPositions.Payload.Utf8ToString(), CultureInfo.InvariantCulture)); } } // test advance() DocsAndPositionsEnum reuse = sortedPositions; sortedPositions = termsEnum.DocsAndPositions(null, reuse); if (sortedPositions is SortingAtomicReader.SortingDocsAndPositionsEnum) { assertTrue(((SortingAtomicReader.SortingDocsAndPositionsEnum)sortedPositions).Reused(reuse)); // make sure reuse worked } doc = 0; while ((doc = sortedPositions.Advance(doc + TestUtil.NextInt(Random(), 1, 5))) != DocIdSetIterator.NO_MORE_DOCS) { int freq = sortedPositions.Freq(); assertEquals("incorrect freq for doc=" + doc, sortedValues[doc] / 10 + 1, freq); for (int i = 0; i < freq; i++) { assertEquals("incorrect position for doc=" + doc, i, sortedPositions.NextPosition()); if (!DoesntSupportOffsets.contains(TestUtil.GetPostingsFormat(DOC_POSITIONS_FIELD))) { assertEquals("incorrect startOffset for doc=" + doc, i, sortedPositions.StartOffset()); assertEquals("incorrect endOffset for doc=" + doc, i, sortedPositions.EndOffset()); } assertEquals("incorrect payload for doc=" + doc, freq - i, int.Parse(sortedPositions.Payload.Utf8ToString(), CultureInfo.InvariantCulture)); } } }