Class Lucene99SkipReader

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class Lucene99SkipReader
    extends MultiLevelSkipListReader
    Implements the skip list reader for block postings format that stores positions and payloads.

    Although this skipper uses MultiLevelSkipListReader as an interface, its definition of skip position will be a little different.

    For example, when skipInterval = blockSize = 3, df = 2*skipInterval = 6,

     0 1 2 3 4 5
     d d d d d d    (posting list)
         ^     ^    (skip point in MultiLeveSkipWriter)
           ^        (skip point in Lucene99SkipWriter)
     

    In this case, MultiLevelSkipListReader will use the last document as a skip point, while Lucene99SkipReader should assume no skip point will comes.

    If we use the interface directly in Lucene99SkipReader, it may silly try to read another skip data after the only skip point is loaded.

    To illustrate this, we can call skipTo(d[5]), since skip point d[3] has smaller docId, and numSkipped+blockSize== df, the MultiLevelSkipListReader will assume the skip list isn't exhausted yet, and try to load a non-existed skip point

    Therefore, we'll trim df before passing it to the interface. see trim(int)

    • Constructor Detail

      • Lucene99SkipReader

        public Lucene99SkipReader​(IndexInput skipStream,
                                  int maxSkipLevels,
                                  boolean hasPos,
                                  boolean hasOffsets,
                                  boolean hasPayloads)
    • Method Detail

      • trim

        protected int trim​(int df)
        Trim original docFreq to tell skipReader read proper number of skip points.

        Since our definition in Lucene99Skip* is a little different from MultiLevelSkip* This trimmed docFreq will prevent skipReader from: 1. silly reading a non-existed skip point after the last block boundary 2. moving into the vInt block

      • init

        public void init​(long skipPointer,
                         long docBasePointer,
                         long posBasePointer,
                         long payBasePointer,
                         int df)
                  throws IOException
        Throws:
        IOException
      • getPosPointer

        public long getPosPointer()
      • getPosBufferUpto

        public int getPosBufferUpto()
      • getPayPointer

        public long getPayPointer()
      • getPayloadByteUpto

        public int getPayloadByteUpto()
      • getNextSkipDoc

        public int getNextSkipDoc()