Github user jpountz commented on a diff in the pull request:

    https://github.com/apache/lucene-solr/pull/521#discussion_r240152341
  
    --- Diff: 
lucene/core/src/java/org/apache/lucene/index/NumericDocValuesFieldUpdates.java 
---
    @@ -53,14 +55,28 @@ BytesRef binaryValue() {
     
         @Override
         protected void set(long idx) {
    -      value = values.get(idx);
    +      value = values.get(idx) + minValue;
         }
       }
    -  private PagedGrowableWriter values;
    +  private AbstractPagedMutable values;
    +  private final long minValue;
    +
    +  NumericDocValuesFieldUpdates(long delGen, String field, int maxDoc) {
    +   this(delGen, field, Long.MIN_VALUE, Long.MAX_VALUE, maxDoc);
    +  }
     
    -  public NumericDocValuesFieldUpdates(long delGen, String field, int 
maxDoc) {
    +  NumericDocValuesFieldUpdates(long delGen, String field, long minValue, 
long maxValue, int maxDoc) {
         super(maxDoc, delGen, field, DocValuesType.NUMERIC);
    -    values = new PagedGrowableWriter(1, PAGE_SIZE, 1, PackedInts.FAST);
    +    assert minValue <= maxValue : "minValue must be <= maxValue [" + 
minValue + " > " + maxValue + "]";
    +    long max = maxValue - minValue;
    +    if (max < 0) { // pretty large range - fall back to growable writer
    +      values = new PagedGrowableWriter(1, PAGE_SIZE, 1, 
PackedInts.DEFAULT);
    +      this.minValue = 0;
    +    } else {
    +      int bitsPerValue = PackedInts.bitsRequired(max);
    +      values = new PagedMutable(1, PAGE_SIZE, bitsPerValue, 
PackedInts.DEFAULT);
    --- End diff --
    
    since we are sorting in the end, all pages will likely have the same number 
of bits per value in the end anyway, should we move to PackedInts.getMutable 
instead?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to