internal override void AddTerm(int termID) { Debug.Assert(docState.TestPoint("TermVectorsTermsWriterPerField.addTerm start")); TermVectorsPostingsArray postings = (TermVectorsPostingsArray)termsHashPerField.postingsArray; postings.freqs[termID]++; WriteProx(postings, termID); }
internal override void CopyTo(ParallelPostingsArray toArray, int numToCopy) { Debug.Assert(toArray is TermVectorsPostingsArray); TermVectorsPostingsArray to = (TermVectorsPostingsArray)toArray; base.CopyTo(toArray, numToCopy); Array.Copy(freqs, 0, to.freqs, 0, size); Array.Copy(lastOffsets, 0, to.lastOffsets, 0, size); Array.Copy(lastPositions, 0, to.lastPositions, 0, size); }
internal override void NewTerm(int termID) { Debug.Assert(docState.TestPoint("TermVectorsTermsWriterPerField.newTerm start")); TermVectorsPostingsArray postings = (TermVectorsPostingsArray)termsHashPerField.postingsArray; postings.freqs[termID] = 1; postings.lastOffsets[termID] = 0; postings.lastPositions[termID] = 0; WriteProx(postings, termID); }
internal override void AddTerm(int termID) { // LUCENENET: .NET doesn't support asserts in release mode if (Lucene.Net.Diagnostics.Debugging.AssertsEnabled) { docState.TestPoint("TermVectorsTermsWriterPerField.addTerm start"); } TermVectorsPostingsArray postings = (TermVectorsPostingsArray)termsHashPerField.postingsArray; postings.freqs[termID]++; WriteProx(postings, termID); }
internal void WriteProx(TermVectorsPostingsArray postings, int termID) { if (doVectorOffsets) { int startOffset = fieldState.Offset + offsetAttribute.StartOffset; int endOffset = fieldState.Offset + offsetAttribute.EndOffset; termsHashPerField.WriteVInt32(1, startOffset - postings.lastOffsets[termID]); termsHashPerField.WriteVInt32(1, endOffset - startOffset); postings.lastOffsets[termID] = endOffset; } if (doVectorPositions) { BytesRef payload; if (payloadAttribute == null) { payload = null; } else { payload = payloadAttribute.Payload; } int pos = fieldState.Position - postings.lastPositions[termID]; if (payload != null && payload.Length > 0) { termsHashPerField.WriteVInt32(0, (pos << 1) | 1); termsHashPerField.WriteVInt32(0, payload.Length); termsHashPerField.WriteBytes(0, payload.Bytes, payload.Offset, payload.Length); hasPayloads = true; } else { termsHashPerField.WriteVInt32(0, pos << 1); } postings.lastPositions[termID] = fieldState.Position; } }
internal void WriteProx(TermVectorsPostingsArray postings, int termID) { if (DoVectorOffsets) { int startOffset = FieldState.Offset_Renamed + OffsetAttribute.StartOffset(); int endOffset = FieldState.Offset_Renamed + OffsetAttribute.EndOffset(); TermsHashPerField.WriteVInt(1, startOffset - postings.LastOffsets[termID]); TermsHashPerField.WriteVInt(1, endOffset - startOffset); postings.LastOffsets[termID] = endOffset; } if (DoVectorPositions) { BytesRef payload; if (PayloadAttribute == null) { payload = null; } else { payload = PayloadAttribute.Payload; } int pos = FieldState.Position_Renamed - postings.LastPositions[termID]; if (payload != null && payload.Length > 0) { TermsHashPerField.WriteVInt(0, (pos << 1) | 1); TermsHashPerField.WriteVInt(0, payload.Length); TermsHashPerField.WriteBytes(0, payload.Bytes, payload.Offset, payload.Length); HasPayloads = true; } else { TermsHashPerField.WriteVInt(0, pos << 1); } postings.LastPositions[termID] = FieldState.Position_Renamed; } }
internal void FinishDocument() { Debug.Assert(docState.TestPoint("TermVectorsTermsWriterPerField.finish start")); int numPostings = termsHashPerField.bytesHash.Count; BytesRef flushTerm = termsWriter.flushTerm; Debug.Assert(numPostings >= 0); if (numPostings > maxNumPostings) { maxNumPostings = numPostings; } // this is called once, after inverting all occurrences // of a given field in the doc. At this point we flush // our hash into the DocWriter. Debug.Assert(termsWriter.VectorFieldsInOrder(fieldInfo)); TermVectorsPostingsArray postings = (TermVectorsPostingsArray)termsHashPerField.postingsArray; TermVectorsWriter tv = termsWriter.writer; int[] termIDs = termsHashPerField.SortPostings(tv.Comparer); tv.StartField(fieldInfo, numPostings, doVectorPositions, doVectorOffsets, hasPayloads); ByteSliceReader posReader = doVectorPositions ? termsWriter.vectorSliceReaderPos : null; ByteSliceReader offReader = doVectorOffsets ? termsWriter.vectorSliceReaderOff : null; ByteBlockPool termBytePool = termsHashPerField.termBytePool; for (int j = 0; j < numPostings; j++) { int termID = termIDs[j]; int freq = postings.freqs[termID]; // Get BytesRef termBytePool.SetBytesRef(flushTerm, postings.textStarts[termID]); tv.StartTerm(flushTerm, freq); if (doVectorPositions || doVectorOffsets) { if (posReader != null) { termsHashPerField.InitReader(posReader, termID, 0); } if (offReader != null) { termsHashPerField.InitReader(offReader, termID, 1); } tv.AddProx(freq, posReader, offReader); } tv.FinishTerm(); } tv.FinishField(); termsHashPerField.Reset(); fieldInfo.SetStoreTermVectors(); }