@Override public DocIdSetIterator iterator() throws IOException { final DocIdSetIterator inIterator = in.iterator(); return new DocIdSetIterator() {
private int firstDocFromNextBlock() throws IOException { while (true) { block += 1; if (block >= docIdSets.length) { sub = null; return doc = NO_MORE_DOCS; } else if (docIdSets[block] != null) { sub = docIdSets[block].iterator(); final int subNext = sub.nextDoc(); assert subNext != NO_MORE_DOCS; return doc = (block << 16) | subNext; } } }
currentIdIterator = currentDocs.docIdSet.iterator(); if ( currentIdIterator != null )
private Scorer scorer(DocIdSet set) throws IOException { if (set == null) { return null; } final DocIdSetIterator disi = set.iterator(); if (disi == null) { return null; } return new ConstantScoreScorer(this, score(), disi); }
private boolean ensureValidDisi() { while ( currentIdIterator == null && docs.hasNext() ) { MatchingDocs matchingDocs = docs.next(); try { currentIdIterator = matchingDocs.docIdSet.iterator(); if ( keepScores ) { currentScorer = new ReplayingScorer( matchingDocs.scores ); } else { currentScorer = new ConstantScoreScorer( null, Float.NaN, currentIdIterator ); } currentReader = matchingDocs.context.reader(); } catch ( IOException e ) { throw new RuntimeException( e ); } } return currentIdIterator != null; } }
private Scorer scorer(DocIdSet set) throws IOException { if (set == null) { return null; } final DocIdSetIterator disi = set.iterator(); if (disi == null) { return null; } return new ConstantScoreScorer(this, score(), disi); }
@Override public int advance(int target) throws IOException { final int targetBlock = target >>> 16; if (targetBlock != block) { block = targetBlock; if (block >= docIdSets.length) { sub = null; return doc = NO_MORE_DOCS; } if (docIdSets[block] == null) { return firstDocFromNextBlock(); } sub = docIdSets[block].iterator(); } final int subNext = sub.advance(target & 0xFFFF); if (subNext == NO_MORE_DOCS) { return firstDocFromNextBlock(); } return doc = (block << 16) | subNext; }
private void replayTo( Collector collector ) throws IOException { for ( MatchingDocs docs : getMatchingDocs() ) { LeafCollector leafCollector = collector.getLeafCollector( docs.context ); Scorer scorer; DocIdSetIterator idIterator = docs.docIdSet.iterator(); if ( isKeepScores() ) { scorer = new ReplayingScorer( docs.scores ); } else { scorer = new ConstantScoreScorer( null, Float.NaN, idIterator ); } leafCollector.setScorer( scorer ); int doc; while ( (doc = idIterator.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS ) { leafCollector.collect( doc ); } } }
return new ConstantScoreScorer(this, score(), result.build().iterator());
return null; final DocIdSetIterator disi = docIdSet.iterator(); if (disi == null) { return null;
return null; final DocIdSetIterator disi = docIdSet.iterator(); if (disi == null) { return null;
return new ConstantScoreScorer(this, score(), result.build().iterator());
assertSame( readerStub.getContext(), matchingDocs.context ); assertEquals( 2, matchingDocs.totalHits ); DocIdSetIterator idIterator = matchingDocs.docIdSet.iterator(); assertEquals( 1, idIterator.nextDoc() ); assertEquals( 3, idIterator.nextDoc() ); assertSame( readerStub.getContext(), matchingDocs.context ); assertEquals( 2, matchingDocs.totalHits ); idIterator = matchingDocs.docIdSet.iterator(); assertEquals( 5, idIterator.nextDoc() ); assertEquals( 9, idIterator.nextDoc() );
@Test void shouldCollectAllHitsPerSegment() throws Exception { // given DocValuesCollector collector = new DocValuesCollector(); IndexReaderStub readerStub = indexReaderWithMaxDocs( 42 ); // when collector.doSetNextReader( readerStub.getContext() ); collector.collect( 1 ); collector.collect( 3 ); collector.collect( 5 ); collector.collect( 9 ); // then assertEquals( 4, collector.getTotalHits() ); List<DocValuesCollector.MatchingDocs> allMatchingDocs = collector.getMatchingDocs(); assertEquals( 1, allMatchingDocs.size() ); DocValuesCollector.MatchingDocs matchingDocs = allMatchingDocs.get( 0 ); assertSame( readerStub.getContext(), matchingDocs.context ); assertEquals( 4, matchingDocs.totalHits ); DocIdSetIterator idIterator = matchingDocs.docIdSet.iterator(); assertEquals( 1, idIterator.nextDoc() ); assertEquals( 3, idIterator.nextDoc() ); assertEquals( 5, idIterator.nextDoc() ); assertEquals( 9, idIterator.nextDoc() ); assertEquals( DocIdSetIterator.NO_MORE_DOCS, idIterator.nextDoc() ); }
public void flush() throws IOException { if (first == false) { final DocIdSet docIdSet = bucketDocsBuilder.build(); processBucket(queue, context, docIdSet.iterator(), lastBucket, builder); bucketDocsBuilder = null; } } }
private boolean ensureValidDisi() { while ( currentIdIterator == null && docs.hasNext() ) { MatchingDocs matchingDocs = docs.next(); try { currentIdIterator = matchingDocs.docIdSet.iterator(); if ( keepScores ) { currentScorer = new ReplayingScorer( matchingDocs.scores ); } else { currentScorer = new ConstantScoreScorer( null, Float.NaN, currentIdIterator ); } currentReader = matchingDocs.context.reader(); } catch ( IOException e ) { throw new RuntimeException( e ); } } return currentIdIterator != null; } }
@Override public Scorer scorer(LeafReaderContext context) throws IOException { final DocIdSet disi = build(context.reader()); final DocIdSetIterator leafIt = disi.iterator(); return new ConstantScoreScorer(this, score(), leafIt); }
private void replayTo( Collector collector ) throws IOException { for ( MatchingDocs docs : getMatchingDocs() ) { LeafCollector leafCollector = collector.getLeafCollector( docs.context ); Scorer scorer; DocIdSetIterator idIterator = docs.docIdSet.iterator(); if ( isKeepScores() ) { scorer = new ReplayingScorer( docs.scores ); } else { scorer = new ConstantScoreScorer( null, Float.NaN, idIterator ); } leafCollector.setScorer( scorer ); int doc; while ( (doc = idIterator.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS ) { leafCollector.collect( doc ); } } }
@Override public void visit(int docID, byte[] packedValue) throws IOException { if (compare(packedValue, packedValue) != PointValues.Relation.CELL_CROSSES_QUERY) { remaining --; return; } long bucket = bucketFunction.applyAsLong(packedValue); if (first == false && bucket != lastBucket) { final DocIdSet docIdSet = bucketDocsBuilder.build(); if (processBucket(queue, context, docIdSet.iterator(), lastBucket, builder) && // lower bucket is inclusive lowerBucket != lastBucket) { // this bucket does not have any competitive composite buckets, // we can early terminate the collection because the remaining buckets are guaranteed // to be greater than this bucket. throw new CollectionTerminatedException(); } bucketDocsBuilder = new DocIdSetBuilder(maxDoc); assert remaining > 0; adder = bucketDocsBuilder.grow(remaining); } lastBucket = bucket; first = false; adder.add(docID); remaining --; }
/** returns a Scorer for INTERSECT queries that uses a sparse bitset */ protected Scorer getIntersectsScorer(XLatLonShapeQuery query, LeafReader reader, Weight weight, DocIdSetBuilder docIdSetBuilder, final float boost) throws IOException { if (values.getDocCount() == reader.maxDoc() && values.getDocCount() == values.size() && cost() > reader.maxDoc() / 2) { // If all docs have exactly one value and the cost is greater // than half the leaf size then maybe we can make things faster // by computing the set of documents that do NOT match the query final FixedBitSet result = new FixedBitSet(reader.maxDoc()); result.set(0, reader.maxDoc()); int[] cost = new int[]{reader.maxDoc()}; values.intersect(getInverseIntersectVisitor(query, result, cost)); final DocIdSetIterator iterator = new BitSetIterator(result, cost[0]); return new ConstantScoreScorer(weight, boost, iterator); } values.intersect(visitor); DocIdSetIterator iterator = docIdSetBuilder.build().iterator(); return new ConstantScoreScorer(weight, boost, iterator); }