Class FieldUpdatesBuffer


  • final class FieldUpdatesBuffer
    extends java.lang.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 Detail

      • 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
      • docsUpTo

        private int[] docsUpTo
      • numericValues

        private long[] numericValues
      • maxNumeric

        private long maxNumeric
      • minNumeric

        private long minNumeric
      • fields

        private java.lang.String[] fields
      • isNumeric

        private final boolean isNumeric
    • Method Detail

      • sizeOfString

        private static long sizeOfString​(java.lang.String string)
      • getMaxNumeric

        long getMaxNumeric()
      • getMinNumeric

        long getMinNumeric()
      • add

        void add​(java.lang.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)
      • isNumeric

        boolean isNumeric()
      • hasSingleValue

        boolean hasSingleValue()
      • getNumericValue

        long getNumericValue​(int idx)
      • getArrayIndex

        private static int getArrayIndex​(int arrayLength,
                                         int index)