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(); }
/** Return the cumulated number of points across all leaves of the given * {@link IndexReader}. Leaves that do not have points for the given field * are ignored. * @see PointValues#size() */ public static long size(IndexReader reader, String field) throws IOException { long size = 0; for (LeafReaderContext ctx : reader.leaves()) { PointValues values = ctx.reader().getPointValues(field); if (values != null) { size += values.size(); } } return size; }
final List<LeafReaderContext> leaves = reader.leaves(); switch (leaves.size()) { 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));
@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; }
/** Return the cumulated number of docs that have points across all leaves * of the given {@link IndexReader}. Leaves that do not have points for the * given field are ignored. * @see PointValues#getDocCount() */ public static int getDocCount(IndexReader reader, String field) throws IOException { int count = 0; for (LeafReaderContext ctx : reader.leaves()) { PointValues values = ctx.reader().getPointValues(field); if (values != null) { count += values.getDocCount(); } } return count; }
final List<LeafReaderContext> leaves = r.leaves(); final int size = leaves.size(); if (size == 0) { 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 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; } }
/** This method may return null if the field does not exist or if it has no terms. */ public static Terms getTerms(IndexReader r, String field) throws IOException { final List<LeafReaderContext> leaves = r.leaves(); if (leaves.size() == 1) { return leaves.get(0).reader().terms(field); } final List<Terms> termsPerLeaf = new ArrayList<>(leaves.size()); final List<ReaderSlice> slicePerLeaf = new ArrayList<>(leaves.size()); for (int leafIdx = 0; leafIdx < leaves.size(); leafIdx++) { LeafReaderContext ctx = leaves.get(leafIdx); Terms subTerms = ctx.reader().terms(field); if (subTerms != null) { termsPerLeaf.add(subTerms); slicePerLeaf.add(new ReaderSlice(ctx.docBase, r.maxDoc(), leafIdx - 1)); } } if (termsPerLeaf.size() == 0) { return null; } else { return new MultiTerms(termsPerLeaf.toArray(Terms.EMPTY_ARRAY), slicePerLeaf.toArray(ReaderSlice.EMPTY_ARRAY)); } }
/** Call this to get the (merged) FieldInfos for a * composite reader. * <p> * NOTE: the returned field numbers will likely not * correspond to the actual field numbers in the underlying * readers, and codec metadata ({@link FieldInfo#getAttribute(String)} * will be unavailable. */ public static FieldInfos getMergedFieldInfos(IndexReader reader) { final String softDeletesField = reader.leaves().stream() .map(l -> l.reader().getFieldInfos().getSoftDeletesField()) .filter(Objects::nonNull).findAny().orElse(null); final FieldInfos.Builder builder = new FieldInfos.Builder(new FieldInfos.FieldNumbers(softDeletesField)); for(final LeafReaderContext ctx : reader.leaves()) { builder.add(ctx.reader().getFieldInfos()); } return builder.finish(); }
@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"); } } } }
final List<LeafReaderContext> leaves = r.leaves(); final int size = leaves.size(); if (size == 0) { return null; } else if (size == 1) { return leaves.get(0).reader().getNumericDocValues(field); FieldInfo fieldInfo = leaf.reader().getFieldInfos().fieldInfo(field); if (fieldInfo != null) { DocValuesType dvType = fieldInfo.getDocValuesType();
List<LeafReaderContext> leaves = reader.leaves(); List<Holder> enums = new ArrayList<>(leaves.size()); final Weight weight; Terms terms = context.reader().terms(field); if (terms == null) { continue; final Bits liveDocs = context.reader().getLiveDocs(); if (liveDocs != null) { docs = new FilteredDocIdSetIterator(docs) { bits = BitSet.of(docs, context.reader().maxDoc());
final List<LeafReaderContext> leaves = r.leaves(); final int size = leaves.size(); if (size == 0) { return null; } else if (size == 1) { return leaves.get(0).reader().getBinaryDocValues(field); FieldInfo fieldInfo = leaf.reader().getFieldInfos().fieldInfo(field); if (fieldInfo != null) { DocValuesType dvType = fieldInfo.getDocValuesType();