Пример #1
0
  // inherit javadoc
  public void search(Weight weight, Filter filter, final HitCollector results) throws IOException {

    Scorer scorer = weight.scorer(reader);
    if (scorer == null) return;

    if (filter == null) {
      scorer.score(results);
      return;
    }
    DocIdSetIterator filterDocIdIterator =
        filter.getDocIdSet(reader).iterator(); // CHECKME: use ConjunctionScorer here?

    boolean more = filterDocIdIterator.next() && scorer.skipTo(filterDocIdIterator.doc());

    while (more) {
      int filterDocId = filterDocIdIterator.doc();
      if (filterDocId > scorer.doc() && !scorer.skipTo(filterDocId)) {
        more = false;
      } else {
        int scorerDocId = scorer.doc();
        if (scorerDocId == filterDocId) { // permitted by filter
          results.collect(scorerDocId, scorer.score());
          more = filterDocIdIterator.next();
        } else {
          more = filterDocIdIterator.skipTo(scorerDocId);
        }
      }
    }
  }
Пример #2
0
  /** Scores all documents and passes them to a collector. */
  public void score(HitCollector hc, Searcher searcher) throws IOException {
    this.searcher = searcher;

    while (next(this.searcher)) {
      hc.collect(doc(), score(searcher));
    }
  }