protected Iterator search()

in lucene/src/main/java/com/twitter/elephantbird/mapreduce/input/LuceneIndexCollectAllRecordReader.java [50:95]


  protected Iterator<T> search(final IndexSearcher searcher, final Query query) throws IOException {
    // grow the bit set if needed
    docIds.set(searcher.getIndexReader().maxDoc());
    // clear it
    docIds.clear();
    searcher.search(query, new Collector() {
      private int docBase;

      @Override
      public void setScorer(Scorer scorer) {
      }

      @Override
      public boolean acceptsDocsOutOfOrder() {
        return true;
      }

      @Override
      public void collect(int doc) {
        docIds.set(doc + docBase);
      }

      public void setNextReader(AtomicReaderContext context) {
        this.docBase = context.docBase;
      }
    });

    return new AbstractIterator<T>() {
      private int doc = docIds.nextSetBit(0);

      @Override
      protected T computeNext() {
        ((Progressable)context).progress(); // casting to avoid Hadoop 2 incompatibility
        if (doc < 0) {
          return endOfData();
        }
        try {
          T ret = docToValue(searcher.doc(doc));
          doc = docIds.nextSetBit(doc + 1);
          return  ret;
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
    };
  }