Example #1
0
        internal override void AddTerm(int termID)
        {
            Debug.Assert(docState.TestPoint("TermVectorsTermsWriterPerField.addTerm start"));
            TermVectorsPostingsArray postings = (TermVectorsPostingsArray)termsHashPerField.postingsArray;

            postings.freqs[termID]++;

            WriteProx(postings, termID);
        }
Example #2
0
            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);
            }
Example #3
0
        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);
        }
Example #5
0
        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;
            }
        }
Example #6
0
        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;
            }
        }
Example #7
0
        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();
        }
        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;
            }
        }