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

Mark Miller reassigned LUCENE-1583:
-----------------------------------

    Assignee: Mark Miller

I guess I'll do this one.

You out there reading Paul Elschot? This look right to you? Any issues it might 
cause?

Else I guess I'll have to put on my thinking cap and figure it myself.

> 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
>            Assignee: Mark Miller
>            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-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to