Package org.apache.lucene.codecs.uniformsplit

# Class BlockReader

java.lang.Object
org.apache.lucene.index.TermsEnum
org.apache.lucene.index.BaseTermsEnum
org.apache.lucene.codecs.uniformsplit.BlockReader

All Implemented Interfaces:
  `Accountable`, `BytesRefIterator`

Direct Known Subclasses:
  `IntersectBlockReader`, `STBlockReader`

public class BlockReader extends BaseTermsEnum implements Accountable
Seeks the block corresponding to a given term, read the block bytes, and scans the block terms.

Reads fully the block in `blockReadBuffer`. Then scans the block terms in memory. The details region is lazily decoded with `termStatesReadBuffer` which shares the same byte array with `blockReadBuffer`. See `BlockWriter` and `BlockLine` for the block format.

WARNING: This API is experimental and might change in incompatible ways in the next release.

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from class org.apache.lucene.index.TermsEnum

  `TermsEnum.SeekStatus`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final BlockDecoder`
  `blockDecoder`
  `protected int`
  `blockFirstLineStart`
  Offset of the start of the first line of the current block (just after the header), relative to the block start.
  `protected BlockHeader`
  `blockHeader`
  Current block header.
  `protected BlockHeader.Serializer`
  `blockHeaderReader`
  `protected IndexInput`
  `blockInput`
  `IndexInput` on the `block file`.
  `protected BlockLine`
  `blockLine`
  Current block line.
  `protected BlockLine.Serializer`
  `blockLineReader`
  `protected ByteArrayDataInput`
  `blockReadBuffer`
  In-memory read buffer for the current block.
  `protected long`
  `blockStartFP`
  Current block start file pointer, absolute in the `block file`.
  `protected IndexDictionary.Browser`
  `dictionaryBrowser`
  Holds the `IndexDictionary.Browser` once loaded.
  `protected final IndexDictionary.BrowserSupplier`
  `dictionaryBrowserSupplier`
  `IndexDictionary.Browser` supplier for lazy loading.
  `protected final FieldMetadata`
  `fieldMetadata`
  `protected BytesRefBuilder`
  `forcedTerm`
  Set when `seekExact(BytesRef, TermState)` is called.
  `protected int`
  `lineIndexInBlock`
  Current line index in the block.
  `protected final PostingsReaderBase`
  `postingsReader`
  `protected BytesRef`
  `scratchBlockBytes`
  `protected BlockLine`
  `scratchBlockLine`
  `protected final BlockTermState`
  `scratchTermState`
  `protected BlockTermState`
  `termState`
  Current block line details.
  `protected boolean`
  `termStateForced`
  Whether the current `TermState` has been forced with a call to `seekExact(BytesRef, TermState)`.
  `protected DeltaBaseTermStateSerializer`
  `termStateSerializer`
  `protected ByteArrayDataInput`
  `termStatesReadBuffer`
  In-memory read buffer for the details region of the current block.

  ### Fields inherited from class org.apache.lucene.index.TermsEnum

  `EMPTY`

  ### Fields inherited from interface org.apache.lucene.util.Accountable

  `NULL_ACCOUNTABLE`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `BlockReader(IndexDictionary.BrowserSupplier dictionaryBrowserSupplier, IndexInput blockInput, PostingsReaderBase postingsReader, FieldMetadata fieldMetadata, BlockDecoder blockDecoder)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `clearTermState()`
  Called by the primary `TermsEnum` methods to clear the previous `TermState`.
  `protected int`
  `compareToMiddleAndJump(BytesRef searchedTerm)`
  Compares the searched term to the middle term of the block.
  `protected BlockHeader.Serializer`
  `createBlockHeaderSerializer()`
  `protected BlockLine.Serializer`
  `createBlockLineSerializer()`
  `protected DeltaBaseTermStateSerializer`
  `createDeltaBaseTermStateSerializer()`
  `protected BytesRef`
  `decodeBlockBytesIfNeeded(int numBlockBytes)`
  `int`
  `docFreq()`
  `protected IndexDictionary.Browser`
  `getOrCreateDictionaryBrowser()`
  `ImpactsEnum`
  `impacts(int flags)`
  `protected void`
  `initializeBlockReadLazily()`
  `protected void`
  `initializeHeader(BytesRef searchedTerm, long targetBlockStartFP)`
  Reads and sets `blockHeader`.
  `protected boolean`
  `isBeyondLastTerm(BytesRef searchedTerm, long blockStartFP)`
  Indicates whether the searched term is beyond the last term of the field.
  `protected boolean`
  `isCurrentTerm(BytesRef searchedTerm)`
  `protected CorruptIndexException`
  `newCorruptIndexException(String msg, Long fp)`
  `BytesRef`
  `next()`
  `protected BytesRef`
  `nextTerm()`
  Moves to the next term line and reads it, it may be in the next block.
  `long`
  `ord()`
  `PostingsEnum`
  `postings(PostingsEnum reuse, int flags)`
  `long`
  `ramBytesUsed()`
  `protected BlockHeader`
  `readHeader()`
  Reads the block header.
  `protected BlockLine`
  `readLineInBlock()`
  Reads the current block line.
  `protected BlockTermState`
  `readTermState()`
  Reads the `BlockTermState` on the current line.
  `protected BlockTermState`
  `readTermStateIfNotRead()`
  Reads the `BlockTermState` if it is not already set.
  `TermsEnum.SeekStatus`
  `seekCeil(BytesRef searchedTerm)`
  `void`
  `seekExact(long ord)`
  Not supported.
  `boolean`
  `seekExact(BytesRef searchedTerm)`
  `void`
  `seekExact(BytesRef term, TermState state)`
  Positions this `BlockReader` without re-seeking the term dictionary.
  `protected TermsEnum.SeekStatus`
  `seekInBlock(BytesRef searchedTerm)`
  Seeks to the provided term in this block.
  `protected TermsEnum.SeekStatus`
  `seekInBlock(BytesRef searchedTerm, long blockStartFP)`
  Seeks to the provided term in the block starting at the provided file pointer.
  `BytesRef`
  `term()`
  `TermState`
  `termState()`
  `long`
  `totalTermFreq()`

  ### Methods inherited from class org.apache.lucene.index.BaseTermsEnum

  `attributes, prepareSeekExact`

  ### Methods inherited from class org.apache.lucene.index.TermsEnum

  `postings`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface org.apache.lucene.util.Accountable

  `getChildResources`

- ## Field Details

  - ### blockInput

    protected IndexInput blockInput
    `IndexInput` on the `block file`.

  - ### postingsReader

    protected final PostingsReaderBase postingsReader

  - ### fieldMetadata

    protected final FieldMetadata fieldMetadata

  - ### blockDecoder

    protected final BlockDecoder blockDecoder

  - ### blockHeaderReader

    protected BlockHeader.Serializer blockHeaderReader

  - ### blockLineReader

    protected BlockLine.Serializer blockLineReader

  - ### blockReadBuffer

    protected ByteArrayDataInput blockReadBuffer
    In-memory read buffer for the current block.

  - ### termStatesReadBuffer

    protected ByteArrayDataInput termStatesReadBuffer
    In-memory read buffer for the details region of the current block. It shares the same byte array as `blockReadBuffer`, with a different position.

  - ### termStateSerializer

    protected DeltaBaseTermStateSerializer termStateSerializer

  - ### dictionaryBrowserSupplier

    protected final IndexDictionary.BrowserSupplier dictionaryBrowserSupplier
    `IndexDictionary.Browser` supplier for lazy loading.

  - ### dictionaryBrowser

    protected IndexDictionary.Browser dictionaryBrowser
    Holds the `IndexDictionary.Browser` once loaded.

  - ### blockStartFP

    protected long blockStartFP
    Current block start file pointer, absolute in the `block file`.

  - ### blockHeader

    protected BlockHeader blockHeader
    Current block header.

  - ### blockLine

    protected BlockLine blockLine
    Current block line.

  - ### termState

    protected BlockTermState termState
    Current block line details.

  - ### blockFirstLineStart

    protected int blockFirstLineStart
    Offset of the start of the first line of the current block (just after the header), relative to the block start.

  - ### lineIndexInBlock

    protected int lineIndexInBlock
    Current line index in the block.

  - ### termStateForced

    protected boolean termStateForced
    Whether the current `TermState` has been forced with a call to `seekExact(BytesRef, TermState)`.
    See Also:
      - `forcedTerm`

  - ### forcedTerm

    protected BytesRefBuilder forcedTerm
    Set when `seekExact(BytesRef, TermState)` is called.

    This optimizes the use-case when the caller calls first `seekExact(BytesRef, TermState)` and then `postings(PostingsEnum, int)`. In this case we don't access the terms block file (we don't seek) but directly the postings file because we already have the `TermState` with the file pointers to the postings file.

  - ### scratchBlockBytes

    protected BytesRef scratchBlockBytes

  - ### scratchTermState

    protected final BlockTermState scratchTermState

  - ### scratchBlockLine

    protected BlockLine scratchBlockLine

- ## Constructor Details

  - ### BlockReader

    protected BlockReader(IndexDictionary.BrowserSupplier dictionaryBrowserSupplier, IndexInput blockInput, PostingsReaderBase postingsReader, FieldMetadata fieldMetadata, BlockDecoder blockDecoder) throws IOException
    Parameters:
      `dictionaryBrowserSupplier` - to load the `IndexDictionary.Browser` lazily in `seekCeil(BytesRef)`.
      `blockDecoder` - Optional block decoder, may be null if none. It can be used for decompression or decryption.
    Throws:
      `IOException`

- ## Method Details

  - ### seekCeil

    public TermsEnum.SeekStatus seekCeil(BytesRef searchedTerm) throws IOException
    Specified by:
      `seekCeil` in class `TermsEnum`
    Throws:
      `IOException`

  - ### seekExact

    public boolean seekExact(BytesRef searchedTerm) throws IOException
    Overrides:
      `seekExact` in class `BaseTermsEnum`
    Throws:
      `IOException`

  - ### isCurrentTerm

    protected boolean isCurrentTerm(BytesRef searchedTerm)

  - ### isBeyondLastTerm

    protected boolean isBeyondLastTerm(BytesRef searchedTerm, long blockStartFP)
    Indicates whether the searched term is beyond the last term of the field.
    Parameters:
      `blockStartFP` - The current block start file pointer.

  - ### seekInBlock

    protected TermsEnum.SeekStatus seekInBlock(BytesRef searchedTerm, long blockStartFP) throws IOException
    Seeks to the provided term in the block starting at the provided file pointer. Does not exceed the block.
    Throws:
      `IOException`

  - ### seekInBlock

    protected TermsEnum.SeekStatus seekInBlock(BytesRef searchedTerm) throws IOException
    Seeks to the provided term in this block.

    Does not exceed this block; `TermsEnum.SeekStatus.END` is returned if it follows the block.

    Compares the line terms with the `searchedTerm`, taking advantage of the incremental encoding properties.

    Scans linearly the terms. Updates the current block line with the current term.

    Throws:
      `IOException`

  - ### compareToMiddleAndJump

    protected int compareToMiddleAndJump(BytesRef searchedTerm) throws IOException
    Compares the searched term to the middle term of the block. If the searched term is lexicographically equal or after the middle term then jumps to the second half of the block directly.
    Returns:
      The comparison between the searched term and the middle term.
    Throws:
      `IOException`

  - ### readLineInBlock

    protected BlockLine readLineInBlock() throws IOException
    Reads the current block line. Sets `blockLine` and increments `lineIndexInBlock`.
    Returns:
      The `BlockLine`; or null if there no more line in the block.
    Throws:
      `IOException`

  - ### seekExact

    public void seekExact(BytesRef term, TermState state)
    Positions this `BlockReader` without re-seeking the term dictionary.

    The block containing the term is not read by this method. It will be read lazily only if needed, for example if `next()` is called. Calling `postings(org.apache.lucene.index.PostingsEnum, int)` after this method does require the block to be read.

    Overrides:
      `seekExact` in class `BaseTermsEnum`

  - ### seekExact

    public void seekExact(long ord)
    Not supported.
    Specified by:
      `seekExact` in class `TermsEnum`

  - ### next

    public BytesRef next() throws IOException
    Specified by:
      `next` in interface `BytesRefIterator`
    Throws:
      `IOException`

  - ### nextTerm

    protected BytesRef nextTerm() throws IOException
    Moves to the next term line and reads it, it may be in the next block. The term details are not read yet. They will be read only when needed with `readTermStateIfNotRead()`.
    Returns:
      The read term bytes; or null if there is no more term for the field.
    Throws:
      `IOException`

  - ### initializeHeader

    protected void initializeHeader(BytesRef searchedTerm, long targetBlockStartFP) throws IOException
    Reads and sets `blockHeader`. Sets null if there is no block for the field anymore.
    Parameters:
      `searchedTerm` - The searched term; or null if none.
      `targetBlockStartFP` - The file pointer of the block to read.
    Throws:
      `IOException`

  - ### initializeBlockReadLazily

    protected void initializeBlockReadLazily() throws IOException
    Throws:
      `IOException`

  - ### createBlockHeaderSerializer

    protected BlockHeader.Serializer createBlockHeaderSerializer()

  - ### createBlockLineSerializer

    protected BlockLine.Serializer createBlockLineSerializer()

  - ### createDeltaBaseTermStateSerializer

    protected DeltaBaseTermStateSerializer createDeltaBaseTermStateSerializer()

  - ### readHeader

    protected BlockHeader readHeader() throws IOException
    Reads the block header. Sets `blockHeader`.
    Returns:
      The block header; or null if there is no block for the field anymore.
    Throws:
      `IOException`

  - ### decodeBlockBytesIfNeeded

    protected BytesRef decodeBlockBytesIfNeeded(int numBlockBytes) throws IOException
    Throws:
      `IOException`

  - ### readTermStateIfNotRead

    protected BlockTermState readTermStateIfNotRead() throws IOException
    Reads the `BlockTermState` if it is not already set. Sets `termState`.
    Throws:
      `IOException`

  - ### readTermState

    protected BlockTermState readTermState() throws IOException
    Reads the `BlockTermState` on the current line. Sets `termState`.

    Overriding method may return null if there is no `BlockTermState` (in this case the extending class must support a null `termState`).

    Returns:
      The `BlockTermState`; or null if none.
    Throws:
      `IOException`

  - ### term

    public BytesRef term()
    Specified by:
      `term` in class `TermsEnum`

  - ### ord

    public long ord()
    Specified by:
      `ord` in class `TermsEnum`

  - ### docFreq

    public int docFreq() throws IOException
    Specified by:
      `docFreq` in class `TermsEnum`
    Throws:
      `IOException`

  - ### totalTermFreq

    public long totalTermFreq() throws IOException
    Specified by:
      `totalTermFreq` in class `TermsEnum`
    Throws:
      `IOException`

  - ### termState

    public TermState termState() throws IOException
    Overrides:
      `termState` in class `BaseTermsEnum`
    Throws:
      `IOException`

  - ### postings

    public PostingsEnum postings(PostingsEnum reuse, int flags) throws IOException
    Specified by:
      `postings` in class `TermsEnum`
    Throws:
      `IOException`

  - ### impacts

    public ImpactsEnum impacts(int flags) throws IOException
    Specified by:
      `impacts` in class `TermsEnum`
    Throws:
      `IOException`

  - ### ramBytesUsed

    public long ramBytesUsed()
    Specified by:
      `ramBytesUsed` in interface `Accountable`

  - ### getOrCreateDictionaryBrowser

    protected IndexDictionary.Browser getOrCreateDictionaryBrowser() throws IOException
    Throws:
      `IOException`

  - ### clearTermState

    protected void clearTermState()
    Called by the primary `TermsEnum` methods to clear the previous `TermState`.

  - ### newCorruptIndexException

    protected CorruptIndexException newCorruptIndexException(String msg, Long fp)