org.apache.lucene.util.bkd

## Class BKDReader

- java.lang.Object
- - org.apache.lucene.index.PointValues
  - - org.apache.lucene.util.bkd.BKDReader

    public final class BKDReader
    extends PointValues

Handles intersection of an multi-dimensional shape in byte[] space with a block KD-tree previously written with `BKDWriter`.

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

### Nested Class Summary

Nested Classes
`protected static class` `BKDReader.BKDReaderDocIDSetIterator` Reusable `DocIdSetIterator` to handle low cardinality leaves.
`class` `BKDReader.IndexTree` Used to walk the off-heap index.
`static class` `BKDReader.IntersectState` Used to track all state for a single call to `intersect(org.apache.lucene.index.PointValues.IntersectVisitor)`.

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

`PointValues.IntersectVisitor, PointValues.Relation`

### Field Summary

Fields
`protected int` `packedBytesLength`
`protected int` `packedIndexBytesLength`

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

`MAX_DIMENSIONS, MAX_INDEX_DIMENSIONS, MAX_NUM_BYTES`

### Constructor Summary

Constructors
Constructor and Description
`BKDReader(IndexInput metaIn, IndexInput indexIn, IndexInput dataIn)` Caller must pre-seek the provided `IndexInput` to the index location that `BKDWriter.finish(org.apache.lucene.store.IndexOutput, org.apache.lucene.store.IndexOutput, org.apache.lucene.store.IndexOutput)` returned.

### Method Summary

All Methods Instance Methods Concrete Methods
`long` `estimatePointCount(PointValues.IntersectVisitor visitor)` Estimate the number of points that would be visited by `PointValues.intersect(org.apache.lucene.index.PointValues.IntersectVisitor)` with the given `PointValues.IntersectVisitor`.
`int` `getBytesPerDimension()` Returns the number of bytes per dimension
`int` `getDocCount()` Returns the total number of documents that have indexed at least one point.
`BKDReader.IntersectState` `getIntersectState(PointValues.IntersectVisitor visitor)` Create a new `BKDReader.IntersectState`
`byte[]` `getMaxPackedValue()` Returns maximum value for each dimension, packed, or null if `PointValues.size(org.apache.lucene.index.IndexReader, java.lang.String)` is `0`
`byte[]` `getMinPackedValue()` Returns minimum value for each dimension, packed, or null if `PointValues.size(org.apache.lucene.index.IndexReader, java.lang.String)` is `0`
`int` `getNumDimensions()` Returns how many dimensions are represented in the values
`int` `getNumIndexDimensions()` Returns how many dimensions are used for the index
`void` `intersect(PointValues.IntersectVisitor visitor)` Finds all documents and points matching the provided visitor.
`boolean` `isLeafNode(int nodeID)`
`long` `size()` Returns the total number of indexed points across all documents.
`void` `visitLeafBlockValues(BKDReader.IndexTree index, BKDReader.IntersectState state)` Visits all docIDs and packed values in a single leaf block

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

`estimateDocCount, getDocCount, getMaxPackedValue, getMinPackedValue, size`

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

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

### Field Detail

#### packedBytesLength

    protected final int packedBytesLength

#### packedIndexBytesLength

    protected final int packedIndexBytesLength

### Constructor Detail

#### BKDReader

    public BKDReader(IndexInput metaIn,
                     IndexInput indexIn,
                     IndexInput dataIn)
              throws IOException

Caller must pre-seek the provided `IndexInput` to the index location that `BKDWriter.finish(org.apache.lucene.store.IndexOutput, org.apache.lucene.store.IndexOutput, org.apache.lucene.store.IndexOutput)` returned. BKD tree is always stored off-heap.

Throws:
  `IOException`

### Method Detail

#### intersect

    public void intersect(PointValues.IntersectVisitor visitor)
                   throws IOException

Description copied from class: `PointValues`
Finds all documents and points matching the provided visitor. This method does not enforce live documents, so it's up to the caller to test whether each document is deleted, if necessary.

Specified by:
  `intersect` in class `PointValues`
Throws:
  `IOException`

#### estimatePointCount

    public long estimatePointCount(PointValues.IntersectVisitor visitor)

Description copied from class: `PointValues`
Estimate the number of points that would be visited by `PointValues.intersect(org.apache.lucene.index.PointValues.IntersectVisitor)` with the given `PointValues.IntersectVisitor`. This should run many times faster than `PointValues.intersect(IntersectVisitor)`.

Specified by:
  `estimatePointCount` in class `PointValues`

#### getIntersectState

    public BKDReader.IntersectState getIntersectState(PointValues.IntersectVisitor visitor)

Create a new `BKDReader.IntersectState`

#### visitLeafBlockValues

    public void visitLeafBlockValues(BKDReader.IndexTree index,
                                     BKDReader.IntersectState state)
                              throws IOException

Visits all docIDs and packed values in a single leaf block

Throws:
  `IOException`

#### getMinPackedValue

    public byte[] getMinPackedValue()

Description copied from class: `PointValues`
Returns minimum value for each dimension, packed, or null if `PointValues.size(org.apache.lucene.index.IndexReader, java.lang.String)` is `0`

Specified by:
  `getMinPackedValue` in class `PointValues`

#### getMaxPackedValue

    public byte[] getMaxPackedValue()

Description copied from class: `PointValues`
Returns maximum value for each dimension, packed, or null if `PointValues.size(org.apache.lucene.index.IndexReader, java.lang.String)` is `0`

Specified by:
  `getMaxPackedValue` in class `PointValues`

#### getNumDimensions

    public int getNumDimensions()

Description copied from class: `PointValues`
Returns how many dimensions are represented in the values

Specified by:
  `getNumDimensions` in class `PointValues`

#### getNumIndexDimensions

    public int getNumIndexDimensions()

Description copied from class: `PointValues`
Returns how many dimensions are used for the index

Specified by:
  `getNumIndexDimensions` in class `PointValues`

#### getBytesPerDimension

    public int getBytesPerDimension()

Description copied from class: `PointValues`
Returns the number of bytes per dimension

Specified by:
  `getBytesPerDimension` in class `PointValues`

#### size

    public long size()

Description copied from class: `PointValues`
Returns the total number of indexed points across all documents.

Specified by:
  `size` in class `PointValues`

#### getDocCount

    public int getDocCount()

Description copied from class: `PointValues`
Returns the total number of documents that have indexed at least one point.

Specified by:
  `getDocCount` in class `PointValues`

#### isLeafNode

    public boolean isLeafNode(int nodeID)