[
https://issues.apache.org/jira/browse/LUCENE-2336?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adrien Grand resolved LUCENE-2336.
----------------------------------
Resolution: Not A Problem
We fixed the docs long time ago to state that the behaviour is undefined if
target is <= docID().
> off by one: DisjunctionSumScorer::advance
> -----------------------------------------
>
> Key: LUCENE-2336
> URL: https://issues.apache.org/jira/browse/LUCENE-2336
> Project: Lucene - Core
> Issue Type: Bug
> Components: core/search
> Reporter: Gary Yngve
> Priority: Minor
> Labels: scorer, search
> Original Estimate: 4h
> Remaining Estimate: 4h
>
> The bug is:
> if (target <= currentDoc) {
> should be
> if (target < currentDoc) {
> based on the comments for the method as well as the contract for
> DocIdSetIterator: "Advances to the first beyond the current"
> It can be demonstrated by:
> assertEquals("advance(1) first match failed", 1,
> scorer.advance(1));
> assertEquals("advance(1) second match failed", n,
> scorer.advance(1));
> if docId: 1 is a hit and n is the next hit. (Tests all pass if this code
> change is made.)
> I'm not labeling it as major because the class is package-protected and
> currently passes spec.
> Relevant excerpt:
> /**
> * Advances to the first match beyond the current whose document number is
> * greater than or equal to a given target. <br>
> * When this method is used the {@link #explain(int)} method should not be
> * used. <br>
> * The implementation uses the skipTo() method on the subscorers.
> *
> * @param target
> * The target document number.
> * @return the document whose number is greater than or equal to the given
> * target, or -1 if none exist.
> */
> public int advance(int target) throws IOException {
> if (scorerDocQueue.size() < minimumNrMatchers) {
> return currentDoc = NO_MORE_DOCS;
> }
> if (target <= currentDoc) {
> return currentDoc;
> }
> do {
> if (scorerDocQueue.topDoc() >= target) {
> boolean b = advanceAfterCurrent();
> return b ? currentDoc : (currentDoc = NO_MORE_DOCS);
> } else if (!scorerDocQueue.topSkipToAndAdjustElsePop(target)) {
> if (scorerDocQueue.size() < minimumNrMatchers) {
> return currentDoc = NO_MORE_DOCS;
> }
> }
> } while (true);
> }
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]