public boolean skipTo(int target) {
if (currentTerm == null) {
return false;
}
if (currentDocumentIndex >= target) {
return next();
}
int startOffset = currentDocumentIndex >= 0 ? currentDocumentIndex : 0;
int pos = currentTerm.seekCeilingDocumentInformationIndex(target, startOffset);
if (pos == -1) {
// mimic SegmentTermDocs that positions at the last index
currentDocumentIndex = currentTerm.getAssociatedDocuments().length -1;
return false;
}
currentDocumentInformation = currentTerm.getAssociatedDocuments()[pos];
currentDocumentIndex = pos;
if (reader.hasDeletions() && reader.isDeleted(currentDocumentInformation.getDocument().getDocumentNumber())) {
return next();
} else {
return true;
}
}
boolean skipTo(int target) {
do {
if (!next())
return false;
} while (target > doc());
return true;
}
This implementation is considerably more efficient than that. |