Franco Callari created LUCENE-4314:
--------------------------------------

             Summary: The specification of DocIdSetIterator is needlessly 
ambiguous.
                 Key: LUCENE-4314
                 URL: https://issues.apache.org/jira/browse/LUCENE-4314
             Project: Lucene - Core
          Issue Type: Improvement
          Components: core/search
    Affects Versions: 4.0-BETA, 3.6.1
         Environment: All
            Reporter: Franco Callari


Quoth Lucene at org.apache.lucene.search.DocIdSetIterator.advance:

     "Advances to the first beyond (see NOTE below) the current whose document
      number is greater than or equal to <i>target</i>. [...]
      NOTE:</b> when <code> target &le; current</code> implementations may opt
      not to advance beyond their current {@link #docID()}."

However, the same specification contradictorily states that advance must behave 
as if written:

     int advance(int target) {
       int doc;
       while ((doc = nextDoc()) < target) {}
       return doc;
     }

That is, with at least one call to nextDoc() always made, unconditionally.

This ambiguity can lead to unexpected behavior. In fact, arguably every user of 
this interface that does not test after every call whether the iterator has 
exhausted AND has advanced is incorrect.

For example, I myself had one experimental implementation (coded against a 
previous Lucene release) that caused an infinite loop in PhraseScorer.java 
because, following the above specification, it "opted" not to move the iterator 
when advance(target) was called with target < current.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to