Skip to content

Refactor doc values to expose a DocIdSetIterator instead of extending DocIdSetIterator. #14475

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.apache.lucene.index.IndexFileNames;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.SegmentReadState;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.store.ChecksumIndexInput;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.store.RandomAccessInput;
Expand Down Expand Up @@ -142,41 +143,23 @@ static class NormsEntry {

abstract static class DenseNormsIterator extends NumericDocValues {

final int maxDoc;
int doc = -1;
final DocIdSetIterator iterator;

DenseNormsIterator(int maxDoc) {
this.maxDoc = maxDoc;
this.iterator = DocIdSetIterator.all(maxDoc);
}

@Override
public int docID() {
return doc;
}

@Override
public int nextDoc() throws IOException {
return advance(doc + 1);
}

@Override
public int advance(int target) throws IOException {
if (target >= maxDoc) {
return doc = NO_MORE_DOCS;
}
return doc = target;
public DocIdSetIterator iterator() {
return iterator;
}

@Override
public boolean advanceExact(int target) throws IOException {
this.doc = target;
int r = iterator.advance(target);
assert r == target;
return true;
}

@Override
public long cost() {
return maxDoc;
}
}

abstract static class SparseNormsIterator extends NumericDocValues {
Expand All @@ -188,29 +171,14 @@ abstract static class SparseNormsIterator extends NumericDocValues {
}

@Override
public int docID() {
return disi.docID();
}

@Override
public int nextDoc() throws IOException {
return disi.nextDoc();
}

@Override
public int advance(int target) throws IOException {
return disi.advance(target);
public DocIdSetIterator iterator() {
return disi;
}

@Override
public boolean advanceExact(int target) throws IOException {
return disi.advanceExact(target);
}

@Override
public long cost() {
return disi.cost();
}
}

private void readFields(IndexInput meta, FieldInfos infos) throws IOException {
Expand Down Expand Up @@ -387,28 +355,28 @@ public long longValue() throws IOException {
return new DenseNormsIterator(maxDoc) {
@Override
public long longValue() throws IOException {
return slice.readByte(doc);
return slice.readByte(iterator.docID());
}
};
case 2:
return new DenseNormsIterator(maxDoc) {
@Override
public long longValue() throws IOException {
return slice.readShort(((long) doc) << 1);
return slice.readShort(((long) iterator.docID()) << 1);
}
};
case 4:
return new DenseNormsIterator(maxDoc) {
@Override
public long longValue() throws IOException {
return slice.readInt(((long) doc) << 2);
return slice.readInt(((long) iterator.docID()) << 2);
}
};
case 8:
return new DenseNormsIterator(maxDoc) {
@Override
public long longValue() throws IOException {
return slice.readLong(((long) doc) << 3);
return slice.readLong(((long) iterator.docID()) << 3);
}
};
default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.FilterDocIdSetIterator;
import org.apache.lucene.store.BufferedChecksumIndexInput;
import org.apache.lucene.store.ChecksumIndexInput;
import org.apache.lucene.store.IndexInput;
Expand Down Expand Up @@ -182,23 +183,8 @@ public NumericDocValues getNumeric(FieldInfo fieldInfo) throws IOException {
return new NumericDocValues() {

@Override
public int nextDoc() throws IOException {
return docsWithField.nextDoc();
}

@Override
public int docID() {
return docsWithField.docID();
}

@Override
public long cost() {
return docsWithField.cost();
}

@Override
public int advance(int target) throws IOException {
return docsWithField.advance(target);
public DocIdSetIterator iterator() {
return docsWithField;
}

@Override
Expand Down Expand Up @@ -367,23 +353,8 @@ public BytesRef apply(int docID) {
return new BinaryDocValues() {

@Override
public int nextDoc() throws IOException {
return docsWithField.nextDoc();
}

@Override
public int docID() {
return docsWithField.docID();
}

@Override
public long cost() {
return docsWithField.cost();
}

@Override
public int advance(int target) throws IOException {
return docsWithField.advance(target);
public DocIdSetIterator iterator() {
return docsWithField;
}

@Override
Expand Down Expand Up @@ -508,42 +479,47 @@ public SortedDocValues getSorted(FieldInfo fieldInfo) throws IOException {
return new SortedDocValues() {

int doc = -1;
int ord;

@Override
public int nextDoc() throws IOException {
return advance(docID() + 1);
}

@Override
public int docID() {
return doc;
}
public DocIdSetIterator iterator() {
return new DocIdSetIterator() {

@Override
public long cost() {
return maxDoc;
}
@Override
public int nextDoc() throws IOException {
return advance(docID() + 1);
}

int ord;
@Override
public int docID() {
return doc;
}

@Override
public int advance(int target) throws IOException {
for (int i = target; i < maxDoc; ++i) {
in.seek(
field.dataStartFilePointer
+ field.numValues * (9 + field.pattern.length() + field.maxLength)
+ i * (long) (1 + field.ordPattern.length()));
SimpleTextUtil.readLine(in, scratch);
try {
ord = (int) ordDecoder.parse(scratch.get().utf8ToString()).longValue() - 1;
} catch (ParseException pe) {
throw new CorruptIndexException("failed to parse ord", in, pe);
@Override
public long cost() {
return maxDoc;
}
if (ord >= 0) {
return doc = i;

@Override
public int advance(int target) throws IOException {
for (int i = target; i < maxDoc; ++i) {
in.seek(
field.dataStartFilePointer
+ field.numValues * (9 + field.pattern.length() + field.maxLength)
+ i * (long) (1 + field.ordPattern.length()));
SimpleTextUtil.readLine(in, scratch);
try {
ord = (int) ordDecoder.parse(scratch.get().utf8ToString()).longValue() - 1;
} catch (ParseException pe) {
throw new CorruptIndexException("failed to parse ord", in, pe);
}
if (ord >= 0) {
return doc = i;
}
}
return doc = NO_MORE_DOCS;
}
}
return doc = NO_MORE_DOCS;
};
}

@Override
Expand Down Expand Up @@ -614,27 +590,22 @@ public SortedNumericDocValues getSortedNumeric(FieldInfo field) throws IOExcepti
return new SortedNumericDocValues() {

@Override
public int nextDoc() throws IOException {
int doc = binary.nextDoc();
setCurrentDoc();
return doc;
}

@Override
public int docID() {
return binary.docID();
}

@Override
public long cost() {
return binary.cost();
}
public DocIdSetIterator iterator() {
return new FilterDocIdSetIterator(binary.iterator()) {
@Override
public int nextDoc() throws IOException {
int doc = binary.nextDoc();
setCurrentDoc();
return doc;
}

@Override
public int advance(int target) throws IOException {
int doc = binary.advance(target);
setCurrentDoc();
return doc;
@Override
public int advance(int target) throws IOException {
int doc = binary.advance(target);
setCurrentDoc();
return doc;
}
};
}

@Override
Expand Down Expand Up @@ -699,36 +670,42 @@ public SortedSetDocValues getSortedSet(FieldInfo fieldInfo) throws IOException {
int doc = -1;

@Override
public int nextDoc() throws IOException {
return advance(doc + 1);
}
public DocIdSetIterator iterator() {
return new DocIdSetIterator() {

@Override
public int docID() {
return doc;
}
@Override
public int nextDoc() throws IOException {
return advance(doc + 1);
}

@Override
public long cost() {
return maxDoc;
}
@Override
public int docID() {
return doc;
}

@Override
public int advance(int target) throws IOException {
for (int i = target; i < maxDoc; ++i) {
in.seek(
field.dataStartFilePointer
+ field.numValues * (long) (9 + field.pattern.length() + field.maxLength)
+ i * (long) (1 + field.ordPattern.length()));
SimpleTextUtil.readLine(in, scratch);
String ordList = scratch.get().utf8ToString().trim();
if (ordList.isEmpty() == false) {
currentOrds = ordList.split(",");
currentIndex = 0;
return doc = i;
@Override
public long cost() {
return maxDoc;
}
}
return doc = NO_MORE_DOCS;

@Override
public int advance(int target) throws IOException {
for (int i = target; i < maxDoc; ++i) {
in.seek(
field.dataStartFilePointer
+ field.numValues * (long) (9 + field.pattern.length() + field.maxLength)
+ i * (long) (1 + field.ordPattern.length()));
SimpleTextUtil.readLine(in, scratch);
String ordList = scratch.get().utf8ToString().trim();
if (ordList.isEmpty() == false) {
currentOrds = ordList.split(",");
currentIndex = 0;
return doc = i;
}
}
return doc = NO_MORE_DOCS;
}
};
}

@Override
Expand Down
Loading