Class OrdinalBytesRefVector

java.lang.Object
org.elasticsearch.compute.data.AbstractNonThreadSafeRefCounted
org.elasticsearch.compute.data.OrdinalBytesRefVector
All Implemented Interfaces:
Closeable, AutoCloseable, org.apache.lucene.util.Accountable, BytesRefVector, Vector, org.elasticsearch.core.RefCounted, org.elasticsearch.core.Releasable

public final class OrdinalBytesRefVector extends AbstractNonThreadSafeRefCounted implements BytesRefVector
A BytesRefVector consists of a pair: an IntVector for ordinals and a BytesRefVector for the dictionary. Compared to the regular BytesRefVector, this block is slower due to indirect access and consume more memory because of the additional ordinals vector. However, they offer significant speed improvements and reduced memory usage when byte values are frequently repeated
  • Constructor Details

  • Method Details

    • isDense

      public boolean isDense()
      Returns true if this ordinal vector is dense enough to enable optimizations using its ordinals
    • getPositionCount

      public int getPositionCount()
      Description copied from interface: Vector
      Returns the number of positions (rows) in this vector. See class javadoc for the usual way to iterate these positions.
      Specified by:
      getPositionCount in interface Vector
      Returns:
      the number of positions (rows) in this vector
    • blockFactory

      public BlockFactory blockFactory()
      Description copied from interface: Vector
      The block factory associated with this vector.
      Specified by:
      blockFactory in interface Vector
    • allowPassingToDifferentDriver

      public void allowPassingToDifferentDriver()
      Description copied from interface: Vector
      Before passing a Vector to another Driver, it is necessary to switch the owning block factory to its parent, which is associated with the global circuit breaker. This ensures that when the new driver releases this Vector, it returns memory directly to the parent block factory instead of the local block factory of this Block. This is important because the local block factory is not thread safe and doesn't support simultaneous access by more than one thread.
      Specified by:
      allowPassingToDifferentDriver in interface Vector
    • getBytesRef

      public org.apache.lucene.util.BytesRef getBytesRef(int position, org.apache.lucene.util.BytesRef dest)
      Specified by:
      getBytesRef in interface BytesRefVector
    • asBlock

      public OrdinalBytesRefBlock asBlock()
      Description copied from interface: Vector
      Returns a new Block containing this vector.
      Specified by:
      asBlock in interface BytesRefVector
      Specified by:
      asBlock in interface Vector
      Returns:
      a new Block containing this vector
    • asOrdinals

      public OrdinalBytesRefVector asOrdinals()
      Description copied from interface: BytesRefVector
      Returns an ordinal BytesRef vector if this vector is backed by a dictionary and ordinals; otherwise, returns null. Callers must not release the returned vector as no extra reference is retained by this method.
      Specified by:
      asOrdinals in interface BytesRefVector
    • getOrdinalsVector

      public IntVector getOrdinalsVector()
    • getDictionaryVector

      public BytesRefVector getDictionaryVector()
    • filter

      public BytesRefVector filter(boolean mayContainDuplicates, int... positions)
      Description copied from interface: Vector
      Creates a new vector that only exposes the positions provided. Materialization of the selected positions is avoided.
      Specified by:
      filter in interface BytesRefVector
      Specified by:
      filter in interface Vector
      Parameters:
      mayContainDuplicates - may the positions array contain duplicate positions?
      positions - the positions to retain
      Returns:
      a filtered vector
    • keepMask

      public BytesRefBlock keepMask(BooleanVector mask)
      Description copied from interface: Vector
      Build a Block the same values as this Vector, but replacing all values for which mask.getBooleanValue(position) returns false with null. The mask vector must be at least as long as this Vector.
      Specified by:
      keepMask in interface BytesRefVector
      Specified by:
      keepMask in interface Vector
    • slice

      public BytesRefVector slice(int beginInclusive, int endExclusive)
      Description copied from interface: BytesRefVector
      Return a subset of this vector from beginInclusive to endExclusive. This may return the same instance if the range covers all positions, but if it does it will RefCounted.incRef() it.
      Specified by:
      slice in interface BytesRefVector
      Specified by:
      slice in interface Vector
    • deepCopy

      public OrdinalBytesRefVector deepCopy(BlockFactory blockFactory)
      Description copied from interface: BytesRefVector
      Make a deep copy of this Vector using the provided BlockFactory, likely copying all data.
      Specified by:
      deepCopy in interface BytesRefVector
      Specified by:
      deepCopy in interface Vector
    • lookup

      public org.elasticsearch.core.ReleasableIterator<? extends BytesRefBlock> lookup(IntBlock positions, ByteSizeValue targetBlockSize)
      Description copied from interface: Vector
      Builds an Iterator of new Blocks with the same Vector.elementType() as this Vector whose values are copied from positions in this Vector. It has the same number of positions as the positions parameter.

      For example, if this vector contained [a, b, c] and were called with the block [0, 1, 1, [1, 2]] then the result would be [a, b, b, [b, c]].

      This process produces count(positions) values per positions which could be quite large. Instead of returning a single Block, this returns an Iterator of Blocks containing all of the promised values.

      The returned ReleasableIterator may retain a reference to the positions parameter. Close it to release those references.

      This block is built using the same BlockFactory as was used to build the positions parameter.

      Specified by:
      lookup in interface BytesRefVector
      Specified by:
      lookup in interface Vector
    • elementType

      public ElementType elementType()
      Description copied from interface: Vector
      Returns the element type of this vector.
      Specified by:
      elementType in interface Vector
      Returns:
      the element type of this vector
    • isConstant

      public boolean isConstant()
      Description copied from interface: Vector
      Returns true iff this vector is a constant vector - returns the same constant value for every position.
      Specified by:
      isConstant in interface Vector
      Returns:
      true iff this vector is a constant vector - returns the same constant value for every position
    • ramBytesUsed

      public long ramBytesUsed()
      Specified by:
      ramBytesUsed in interface org.apache.lucene.util.Accountable
    • closeInternal

      protected void closeInternal()
      Description copied from class: AbstractNonThreadSafeRefCounted
      This is called when the number of references reaches zero. This is where resources should be released (adjusting circuit breakers if needed).
      Specified by:
      closeInternal in class AbstractNonThreadSafeRefCounted
    • equals

      public boolean equals(Object o)
      Description copied from interface: BytesRefVector
      Compares the given object with this vector for equality. Returns true if and only if the given object is a BytesRefVector, and both vectors are equal.
      Specified by:
      equals in interface BytesRefVector
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Description copied from interface: BytesRefVector
      Returns the hash code of this vector, as defined by BytesRefVector.hash(BytesRefVector).
      Specified by:
      hashCode in interface BytesRefVector
      Overrides:
      hashCode in class Object