Github user s1monw commented on a diff in the pull request:
https://github.com/apache/lucene-solr/pull/521#discussion_r240234021
--- 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 --
not sure we can since we don't know how many values we actually have?
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]