コード例 #1
0
ファイル: SepPostingsWriter.cs プロジェクト: zfxsss/lucenenet
        /// <summary>
        /// Adds a new doc in this term.  If this returns null
        ///  then we just skip consuming positions/payloads.
        /// </summary>
        public override void StartDoc(int docId, int termDocFreq)
        {
            var delta = docId - LAST_DOC_ID;

            if (docId < 0 || (DF > 0 && delta <= 0))
            {
                throw new CorruptIndexException("docs out of order (" + docId + " <= " + LAST_DOC_ID + " ) (docOut: " +
                                                DOC_OUT + ")");
            }

            if ((++DF % SKIP_INTERVAL) == 0)
            {
                // TODO: -- awkward we have to make these two separate calls to skipper
                SKIP_LIST_WRITER.SetSkipData(LAST_DOC_ID, STORE_PAYLOADS, LAST_PAYLOAD_LENGTH);
                SKIP_LIST_WRITER.BufferSkip(DF);
            }

            LAST_DOC_ID = docId;
            DOC_OUT.Write(delta);
            if (INDEX_OPTIONS != FieldInfo.IndexOptions.DOCS_ONLY)
            {
                //System.out.println("    sepw startDoc: write freq=" + termDocFreq);
                FREQ_OUT.Write(termDocFreq);
            }
        }
コード例 #2
0
ファイル: SepPostingsWriter.cs プロジェクト: zfxsss/lucenenet
        /// <summary>
        /// Add a new position & payload </summary>
        public override void AddPosition(int position, BytesRef payload, int startOffset, int endOffset)
        {
            Debug.Assert(INDEX_OPTIONS == FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS);
            int delta = position - LAST_POSITION;

            Debug.Assert(delta >= 0, "position=" + position + " lastPosition=" + LAST_POSITION);
            // not quite right (if pos=0 is repeated twice we don't catch it)
            LAST_POSITION = position;

            if (STORE_PAYLOADS)
            {
                int payloadLength = payload == null ? 0 : payload.Length;
                if (payloadLength != LAST_PAYLOAD_LENGTH)
                {
                    LAST_PAYLOAD_LENGTH = payloadLength;
                    // TODO: explore whether we get better compression
                    // by not storing payloadLength into prox stream?
                    POS_OUT.Write((delta << 1) | 1);
                    POS_OUT.Write(payloadLength);
                }
                else
                {
                    POS_OUT.Write(delta << 1);
                }

                if (payloadLength > 0 && payload != null)
                {
                    PAYLOAD_OUT.WriteBytes(payload.Bytes, payload.Offset, payloadLength);
                }
            }
            else
            {
                POS_OUT.Write(delta);
            }

            LAST_POSITION = position;
        }