public TopDocs execute(SearchContext context) throws IOException { ScanCollector collector = new ScanCollector(readerStates, context.from(), context.size(), context.trackScores()); Query query = new FilteredQuery(context.query(), new ScanFilter(readerStates, collector)); try { context.searcher().search(query, collector); } catch (ScanCollector.StopCollectingException e) { // all is well } return collector.topDocs(); }
@Override public DocIdSet getDocIdSet(LeafReaderContext context, Bits acceptedDocs) throws IOException { ReaderState readerState = readerStates.get(context.reader()); if (readerState != null && readerState.done) { scanCollector.incCounter(readerState.count); return null; } return BitsFilteredDocIdSet.wrap(new AllDocIdSet(context.reader().maxDoc()), acceptedDocs); }