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();
 }