in lucene/src/main/java/com/twitter/elephantbird/mapreduce/input/LuceneIndexCollectAllRecordReader.java [50:95]
protected Iterator<T> search(final IndexSearcher searcher, final Query query) throws IOException {
// grow the bit set if needed
docIds.set(searcher.getIndexReader().maxDoc());
// clear it
docIds.clear();
searcher.search(query, new Collector() {
private int docBase;
@Override
public void setScorer(Scorer scorer) {
}
@Override
public boolean acceptsDocsOutOfOrder() {
return true;
}
@Override
public void collect(int doc) {
docIds.set(doc + docBase);
}
public void setNextReader(AtomicReaderContext context) {
this.docBase = context.docBase;
}
});
return new AbstractIterator<T>() {
private int doc = docIds.nextSetBit(0);
@Override
protected T computeNext() {
((Progressable)context).progress(); // casting to avoid Hadoop 2 incompatibility
if (doc < 0) {
return endOfData();
}
try {
T ret = docToValue(searcher.doc(doc));
doc = docIds.nextSetBit(doc + 1);
return ret;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
};
}