Class FieldUpdatesBuffer

java.lang.Object
org.apache.lucene.index.FieldUpdatesBuffer

final class FieldUpdatesBuffer extends Object
This class efficiently buffers numeric and binary field updates and stores terms, values and metadata in a memory efficient way without creating large amounts of objects. Update terms are stored without de-duplicating the update term. In general we try to optimize for several use-cases. For instance we try to use constant space for update terms field since the common case always updates on the same field. Also for docUpTo we try to optimize for the case when updates should be applied to all docs ie. docUpTo=Integer.MAX_VALUE. In other cases each update will likely have a different docUpTo. Along the same lines this impl optimizes the case when all updates have a value. Lastly, if all updates share the same value for a numeric field we only store the value once.
  • Field Details

    • SELF_SHALLOW_SIZE

      private static final long SELF_SHALLOW_SIZE
    • STRING_SHALLOW_SIZE

      private static final long STRING_SHALLOW_SIZE
    • bytesUsed

      private final Counter bytesUsed
    • numUpdates

      private int numUpdates
    • termValues

      private final BytesRefArray termValues
    • termSortState

      private BytesRefArray.SortState termSortState
    • byteValues

      private final BytesRefArray byteValues
    • docsUpTo

      private int[] docsUpTo
    • numericValues

      private long[] numericValues
    • hasValues

      private FixedBitSet hasValues
    • maxNumeric

      private long maxNumeric
    • minNumeric

      private long minNumeric
    • fields

      private String[] fields
    • isNumeric

      private final boolean isNumeric
    • finished

      private boolean finished
  • Constructor Details

  • Method Details

    • sizeOfString

      private static long sizeOfString(String string)
    • getMaxNumeric

      long getMaxNumeric()
    • getMinNumeric

      long getMinNumeric()
    • add

      void add(String field, int docUpTo, int ord, boolean hasValue)
    • addUpdate

      void addUpdate(Term term, long value, int docUpTo)
    • addNoValue

      void addNoValue(Term term, int docUpTo)
    • addUpdate

      void addUpdate(Term term, BytesRef value, int docUpTo)
    • append

      private int append(Term term)
    • finish

      void finish()
    • iterator

    • isNumeric

      boolean isNumeric()
    • hasSingleValue

      boolean hasSingleValue()
    • getNumericValue

      long getNumericValue(int idx)
    • getArrayIndex

      private static int getArrayIndex(int arrayLength, int index)