Refine search
private ScoreDocsIterator( TopDocs docs, LeafReaderContext[] contexts ) { this.contexts = contexts; this.iterator = new ArrayIterator<>( docs.scoreDocs ); int segments = contexts.length; docStarts = new int[segments + 1]; for ( int i = 0; i < segments; i++ ) { LeafReaderContext context = contexts[i]; docStarts[i] = context.docBase; } LeafReaderContext lastContext = contexts[segments - 1]; docStarts[segments] = lastContext.docBase + lastContext.reader().maxDoc(); }
@Override public void doSetNextReader( LeafReaderContext context ) { if ( docs != null && segmentHits > 0 ) { createMatchingDocs(); } int maxDoc = context.reader().maxDoc(); docs = createDocs( maxDoc ); if ( keepScores ) { int initialSize = Math.min( 32, maxDoc ); scores = new float[initialSize]; } segmentHits = 0; this.context = context; }
@Override public boolean test(LeafReaderContext context) { final int maxDoc = context.reader().maxDoc(); if (maxDoc < minSize) { return false; } final IndexReaderContext topLevelContext = ReaderUtil.getTopLevelContext(context); final float sizeRatio = (float) context.reader().maxDoc() / topLevelContext.reader().maxDoc(); return sizeRatio >= minSizeRatio; } }
@Override public BulkScorer bulkScorer(LeafReaderContext context) throws IOException { final float score = score(); final int maxDoc = context.reader().maxDoc(); return new BulkScorer() { @Override public int score(LeafCollector collector, Bits acceptDocs, int min, int max) throws IOException { max = Math.min(max, maxDoc); FakeScorer scorer = new FakeScorer(); scorer.score = score; collector.setScorer(scorer); for (int doc = min; doc < max; ++doc) { scorer.doc = doc; if (acceptDocs == null || acceptDocs.get(doc)) { collector.collect(doc); } } return max == maxDoc ? DocIdSetIterator.NO_MORE_DOCS : max; } @Override public long cost() { return maxDoc; } }; } };
private static void validate(CompositeReader[] readers, int maxDoc, int[] leafMaxDoc) { for (int i = 0; i < readers.length; i++) { final CompositeReader reader = readers[i]; final List<? extends LeafReaderContext> subs = reader.leaves(); if (reader.maxDoc() != maxDoc) { throw new IllegalArgumentException("All readers must have same maxDoc: "+maxDoc+"!="+reader.maxDoc()); } final int noSubs = subs.size(); if (noSubs != leafMaxDoc.length) { throw new IllegalArgumentException("All readers must have same number of leaf readers"); } for (int subIDX = 0; subIDX < noSubs; subIDX++) { final LeafReader r = subs.get(subIDX).reader(); if (r.maxDoc() != leafMaxDoc[subIDX]) { throw new IllegalArgumentException("All leaf readers must have same corresponding subReader maxDoc"); } } } }
case 1: return new LeafReaderFields(leaves.get(0).reader()); default: final List<Fields> fields = new ArrayList<>(leaves.size()); final List<ReaderSlice> slices = new ArrayList<>(leaves.size()); for (final LeafReaderContext ctx : leaves) { final LeafReader r = ctx.reader(); final Fields f = new LeafReaderFields(r); fields.add(f); slices.add(new ReaderSlice(ctx.docBase, r.maxDoc(), fields.size()-1));
final int[] leafMaxDoc = new int[noLeaves]; for (int i = 0; i < noLeaves; i++) { final LeafReader r = firstLeaves.get(i).reader(); leafMaxDoc[i] = r.maxDoc(); final LeafReader[] subs = new LeafReader[readers.length]; for (int j = 0; j < readers.length; j++) { subs[j] = readers[j].leaves().get(i).reader(); storedSubs[j] = storedFieldsReaders[j].leaves().get(i).reader();
return null; } else if (size == 1) { return leaves.get(0).reader().getSortedNumericDocValues(field); for (int i = 0; i < size; i++) { LeafReaderContext context = leaves.get(i); SortedNumericDocValues v = context.reader().getSortedNumericDocValues(field); if (v == null) { v = DocValues.emptySortedNumeric(context.reader().maxDoc()); } else { anyReal = true;
@Override public ScorerSupplier scorerSupplier(LeafReaderContext context) throws IOException { LeafReader reader = context.reader(); PointValues values = reader.getPointValues(field); if (values == null) { DocIdSetBuilder result = new DocIdSetBuilder(reader.maxDoc(), values, field); final IntersectVisitor visitor = getIntersectVisitor(result);
@Override public ScorerSupplier scorerSupplier(LeafReaderContext context) throws IOException { LeafReader reader = context.reader(); PointValues values = reader.getPointValues(field); if (values == null) { if (values.getDocCount() == reader.maxDoc() && queryType.compare(ranges, values.getMinPackedValue(), values.getMaxPackedValue(), numDims, bytesPerDim) == Relation.CELL_INSIDE_QUERY) { allDocsMatch = true;