[ https://issues.apache.org/jira/browse/LUCENE-1652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12723511#action_12723511 ]
Michael McCandless commented on LUCENE-1652: -------------------------------------------- I think TopScorer is the only possibility... but let's hold off on that for now? The only other things I see was maybe adding a DISI.start/done, but I think we should hold off on that too? So I'll resolve this on as invalid... > Enhancements to Scorers following the changes to DocIdSetIterator > ----------------------------------------------------------------- > > Key: LUCENE-1652 > URL: https://issues.apache.org/jira/browse/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 > {code} > int doc = sub.done ? -1 : scorer.doc(); > while (!sub.done && doc < end) { > sub.collector.collect(doc); > doc = scorer.nextDoc(); > sub.done = doc < 0; > } > {code} > To this: > {code} > int doc = scorer.doc(); > while (doc < end) { > sub.collector.collect(doc); > doc = scorer.nextDoc(); > } > {code} > And in ConjunctionScorer, change this: > {code} > 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; > {code} > To this: > {code} > while ((firstScorer=scorers[first]).doc() < (lastDoc=lastScorer.doc())) { > firstScorer.advance(lastDoc); > lastScorer = firstScorer; > first = (first == (scorers.length-1)) ? 0 : first+1; > } > return lastDoc != DOC_SENTINEL; > {code} -- 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: java-dev-unsubscr...@lucene.apache.org For additional commands, e-mail: java-dev-h...@lucene.apache.org