Method from org.apache.lucene.index.MultiSegmentReader$MultiTermDocs Detail: |
public void close() throws IOException {
for (int i = 0; i < readerTermDocs.length; i++) {
if (readerTermDocs[i] != null)
readerTermDocs[i].close();
}
}
|
public int doc() {
return base + current.doc();
}
|
public int freq() {
return current.freq();
}
|
public boolean next() throws IOException {
for(;;) {
if (current!=null && current.next()) {
return true;
}
else if (pointer < readers.length) {
base = starts[pointer];
current = termDocs(pointer++);
} else {
return false;
}
}
}
|
public int read(int[] docs,
int[] freqs) throws IOException {
while (true) {
while (current == null) {
if (pointer < readers.length) { // try next segment
base = starts[pointer];
current = termDocs(pointer++);
} else {
return 0;
}
}
int end = current.read(docs, freqs);
if (end == 0) { // none left in segment
current = null;
} else { // got some
final int b = base; // adjust doc numbers
for (int i = 0; i < end; i++)
docs[i] += b;
return end;
}
}
}
Optimized implementation. |
public void seek(Term term) {
this.term = term;
this.base = 0;
this.pointer = 0;
this.current = null;
}
|
public void seek(TermEnum termEnum) throws IOException {
seek(termEnum.term());
}
|
public boolean skipTo(int target) throws IOException {
for(;;) {
if (current != null && current.skipTo(target-base)) {
return true;
} else if (pointer < readers.length) {
base = starts[pointer];
current = termDocs(pointer++);
} else
return false;
}
}
|
protected TermDocs termDocs(IndexReader reader) throws IOException {
return reader.termDocs();
}
|