路径:
org.apache.lucene.search.IndexSearcher IndexSearcher
org.apache.lucene.index.CompositeReader getContext
org.apache.lucene.index.CompositeReaderContext create
org.apache.lucene.index.CompositeReaderContext build
private IndexReaderContext build(CompositeReaderContext parent, IndexReader reader, int ord, int docbase) {
if (reader instanceof LeafReader) {
final LeafReader ar = (LeafReader) reader;
final LeafReaderContext atomic = new LeafReaderContext(parent, ar, ord, docbase, leaves.size(), leafDocbase);
leaves.add(atomic);
leafDocbase += reader.maxDoc();
return atomic;
} else {
final CompositeReader cr = (CompositeReader) reader;
final List extends IndexReader> sequentialSubReaders = cr.getSequentialSubReaders();
final List children = Arrays.asList(new IndexReaderContext[sequentialSubReaders.size()]);
final CompositeReaderContext newParent;
if (parent == null) {
newParent = new CompositeReaderContext(cr, children, leaves);
} else {
newParent = new CompositeReaderContext(parent, cr, ord, docbase, children);
}
// docbase是累加来的
int newDocbase = 0;
for (int i = 0, c = sequentialSubReaders.size(); i < c; i++) {
final IndexReader r = sequentialSubReaders.get(i);
// 此处有个递归
children.set(i, build(newParent, r, i, newDocbase));
newDocbase += r.maxDoc();
}
assert newDocbase == cr.maxDoc();
return newParent;
}
}



