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: [email protected]
For additional commands, e-mail: [email protected]