lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shai Erera (JIRA)" <>
Subject [jira] Created: (LUCENE-1652) Enhancements to Scorers following the changes to DocIdSetIterator
Date Thu, 21 May 2009 20:47:45 GMT
Enhancements to Scorers following the changes to DocIdSetIterator

                 Key: LUCENE-1652
             Project: Lucene - Java
          Issue Type: Improvement
          Components: Search
            Reporter: Shai Erera
             Fix For: 3.0

In LUCENE-1614, we changed the semantics of DocIdSetIterator's methods to return a sentinel
NO_MORE_DOCS (= Integer.MAX_VALUE) when the iterator has exhausted. Due to backward compatibility
issues, we couldn't implement that semantics in doc(). Therefore this issue, which can be
introduced in 3.0 only will:
# Implement the new semantics in all extending classes, such that doc() will return NO_MORE_DOCS
when the iterator has exhausted.
# Change BooleanScorer to take advantage of that by removing sub.done from SubScorer and operate
under the assumption that NO_MORE_DOCS is larger than any doc ID (Integer.MAX_VALUE).
# Change ConjunctionScorer to operate under the same assumptions and remove 'more'.
# Change ReqExclScorer to not rely on reqScorer in doc(), since the latter may be null.
# Make more changes to ConjunctionScorer's init() and remove 'firstTime' to improve the performance
of nextDoc(), score(), advance().
# Add start()/finish() to DISI?

A snippet from LUCENE-1614 regarding the change in BooleanScorer

int doc = sub.done ? -1 : scorer.doc();
while (!sub.done && doc < end) {
  doc = scorer.nextDoc();
  sub.done = doc < 0;

To this:

int doc = scorer.doc();
while (doc < end) {
  doc = scorer.nextDoc();

And in ConjunctionScorer, change this:

while (more && (firstScorer=scorers[first]).doc() < (lastDoc=lastScorer.doc()))
  more = firstScorer.advance(lastDoc) >= 0;
  lastScorer = firstScorer;
  first = (first == (scorers.length-1)) ? 0 : first+1;
return more;

To this:

while ((firstScorer=scorers[first]).doc() < (lastDoc=lastScorer.doc())) {
  lastScorer = firstScorer;
  first = (first == (scorers.length-1)) ? 0 : first+1;
return lastDoc != DOC_SENTINEL;

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message