LUCENE-8834: Cache the SortedNumericDocValues.docValueCount() value whenever it is used in a loop (#698)

This commit is contained in:
Tim Underwood 2019-06-09 23:56:21 -07:00 committed by Adrien Grand
parent fe58b6f3a2
commit 97ca9df7ef
10 changed files with 14 additions and 12 deletions

View File

@ -200,7 +200,7 @@ public final class JoinUtil {
@Override
public void collect(int doc) throws IOException {
if (sortedNumericDocValues.advanceExact(doc)) {
for (int i = 0; i < sortedNumericDocValues.docValueCount(); i++) {
for (int i = 0, count = sortedNumericDocValues.docValueCount(); i < count; i++) {
long value = sortedNumericDocValues.nextValue();
joinValues.add(value);
if (needsScore) {

View File

@ -49,7 +49,7 @@ public class SortedDateStatsValues implements StatsValues {
if (!sndv.advanceExact(docId)) {
missing();
} else {
for (int i = 0 ; i < sndv.docValueCount(); i++) {
for (int i = 0, count = sndv.docValueCount(); i < count; i++) {
dsv.accumulate(new Date(sndv.nextValue()), 1);
}
}

View File

@ -51,7 +51,7 @@ public class SortedNumericStatsValues implements StatsValues {
if (!sndv.advanceExact(docId)) {
missing();
} else {
for (int i = 0 ; i < sndv.docValueCount(); i++) {
for (int i = 0, count = sndv.docValueCount(); i < count; i++) {
nsv.accumulate(toCorrectType(sndv.nextValue()), 1);
}
}

View File

@ -60,7 +60,7 @@ class MultiFieldWriter extends FieldWriter {
if (!vals.advanceExact(sortDoc.docId)) return false;
out.put(this.field,
(IteratorWriter) w -> {
for (int i = 0; i < vals.docValueCount(); i++) {
for (int i = 0, count = vals.docValueCount(); i < count; i++) {
w.add(bitsToValue.apply(vals.nextValue()));
}
});

View File

@ -310,9 +310,10 @@ public class IntervalFacets implements Iterable<FacetInterval> {
private void accumIntervalWithMultipleValues(SortedNumericDocValues longs) throws IOException {
// longs should be already positioned to the correct doc
assert longs.docID() != -1;
assert longs.docValueCount() > 0: "Should have at least one value for this document";
final int docValueCount = longs.docValueCount();
assert docValueCount > 0: "Should have at least one value for this document";
int currentInterval = 0;
for (int i = 0; i < longs.docValueCount(); i++) {
for (int i = 0; i < docValueCount; i++) {
boolean evaluateNextInterval = true;
long value = longs.nextValue();
while (evaluateNextInterval && currentInterval < intervals.length) {

View File

@ -436,7 +436,7 @@ final class NumericFacets {
if (valuesDocID == doc - ctx.docBase) {
long l = longs.nextValue(); // This document must have at least one value
hashTable.add(l, 1);
for (int i = 1; i < longs.docValueCount(); i++) {
for (int i = 1, count = longs.docValueCount(); i < count; i++) {
long lnew = longs.nextValue();
if (lnew > l) { // Skip the value if it's equal to the last one, we don't want to double-count it
hashTable.add(lnew, 1);

View File

@ -564,8 +564,9 @@ public class SolrDocumentFetcher {
case SORTED_NUMERIC:
final SortedNumericDocValues numericDv = leafReader.getSortedNumericDocValues(fieldName);
if (numericDv != null && numericDv.advance(localId) == localId) {
final List<Object> outValues = new ArrayList<>(numericDv.docValueCount());
for (int i = 0; i < numericDv.docValueCount(); i++) {
final int docValueCount = numericDv.docValueCount();
final List<Object> outValues = new ArrayList<>(docValueCount);
for (int i = 0; i < docValueCount; i++) {
long number = numericDv.nextValue();
Object value = decodeNumberFromDV(schemaField, number, true);
// return immediately if the number is not decodable, hence won't return an empty list.

View File

@ -387,7 +387,7 @@ class FacetFieldProcessorByHashDV extends FacetFieldProcessor {
if (values.advanceExact(segDoc)) {
long l = values.nextValue(); // This document must have at least one value
collectValFirstPhase(segDoc, l);
for (int i = 1; i < values.docValueCount(); i++) {
for (int i = 1, count = values.docValueCount(); i < count; i++) {
long lnew = values.nextValue();
if (lnew != l) { // Skip the value if it's equal to the last one, we don't want to double-count it
collectValFirstPhase(segDoc, lnew);

View File

@ -237,7 +237,7 @@ public class HLLAgg extends StrAggValueSource {
@Override
protected void collectValues(int doc, HLL hll) throws IOException {
for (int i = 0; i < values.docValueCount(); i++) {
for (int i = 0, count = values.docValueCount(); i < count; i++) {
// duplicates may be produced for a single doc, but won't matter here.
long val = values.nextValue();
long hash = Hash.fmix64(val);

View File

@ -254,7 +254,7 @@ public class UniqueAgg extends StrAggValueSource {
@Override
protected void collectValues(int doc, LongSet set) throws IOException {
for (int i = 0; i < values.docValueCount(); i++) {
for (int i = 0, count = values.docValueCount(); i < count; i++) {
// duplicates may be produced for a single doc, but won't matter here.
set.add(values.nextValue());
}