private static SolrIndexReader wrap(IndexReader r) { SolrIndexReader sir; // wrap the reader if (!(r instanceof SolrIndexReader)) { sir = new SolrIndexReader(r, null, 0); sir.associateInfo(null); } else { sir = (SolrIndexReader)r; } return sir; }
@Override public SolrIndexReader reopen(boolean openReadOnly) throws IOException { IndexReader r = in.reopen(openReadOnly); if (r == in) { return this; } SolrIndexReader sr = new SolrIndexReader(r, null, 0); sr.associateInfo(this); return sr; }
/** Recursively wrap an IndexReader in SolrIndexReader instances. * @param in the reader to wrap * @param parent the parent, if any (null if none) * @param base the docid offset in the parent (0 if top level) */ public SolrIndexReader(IndexReader in, SolrIndexReader parent, int base) { super(in); assert(!(in instanceof SolrIndexReader)); this.parent = parent; this.base = base; IndexReader subs[] = in.getSequentialSubReaders(); if (subs != null) { subReaders = new SolrIndexReader[subs.length]; int numLeaves = subs.length; leafOffsets = new int[numLeaves]; int b=0; for (int i=0; i<subReaders.length; i++) { SolrIndexReader sir = subReaders[i] = new SolrIndexReader(subs[i], this, b); leafOffsets[i] = b; b += sir.maxDoc(); IndexReader subLeaves[] = sir.leafReaders; numLeaves += subLeaves.length - 1; // subtract 1 for the parent } leafReaders = getLeaves(numLeaves); } else { subReaders = null; leafReaders = new SolrIndexReader[]{this}; leafOffsets = zeroIntArray; } }