You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Mark Miller (JIRA)" <ji...@apache.org> on 2009/06/11 05:31:07 UTC

[jira] Updated: (LUCENE-1583) SpanOrQuery skipTo() doesn't always move forwards

     [ https://issues.apache.org/jira/browse/LUCENE-1583?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mark Miller updated LUCENE-1583:
--------------------------------

    Attachment: LUCENE-1583.patch

I havn't looked closely at it yet, but tests appear to pass (unknown if tests actually hit skipto on SpanOrQuery though)

> SpanOrQuery skipTo() doesn't always move forwards
> -------------------------------------------------
>
>                 Key: LUCENE-1583
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1583
>             Project: Lucene - Java
>          Issue Type: Bug
>          Components: Search
>    Affects Versions: 1.9, 2.0.0, 2.1, 2.2, 2.3, 2.3.1, 2.3.2, 2.4, 2.4.1
>            Reporter: Moti Nisenson
>            Priority: Minor
>             Fix For: 2.9
>
>         Attachments: LUCENE-1583.patch
>
>
> In SpanOrQuery the skipTo() method is improperly implemented if the target doc is less than or equal to the current doc, since skipTo() may not be called for any of the clauses' spans:
>     public boolean skipTo(int target) throws IOException {
>           if (queue == null) {
>             return initSpanQueue(target);
>           }
>           while (queue.size() != 0 && top().doc() < target) {
>             if (top().skipTo(target)) {
>               queue.adjustTop();
>             } else {
>               queue.pop();
>             }
>           }
>           
>         	return queue.size() != 0;
>         }
> This violates the correct behavior (as described in the Spans interface documentation), that skipTo() should always move forwards, in other words the correct implementation would be:
>     public boolean skipTo(int target) throws IOException {
>           if (queue == null) {
>             return initSpanQueue(target);
>           }
>           boolean skipCalled = false;
>           while (queue.size() != 0 && top().doc() < target) {
>             if (top().skipTo(target)) {
>               queue.adjustTop();
>             } else {
>               queue.pop();
>             }
>             skipCalled = true;
>           }
>           
>           if (skipCalled) {
>         	return queue.size() != 0;
>           }
>           return next();
>         }

-- 
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-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-dev-help@lucene.apache.org