lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul Elschot (JIRA)" <j...@apache.org>
Subject [jira] Commented: (LUCENE-1583) SpanOrQuery skipTo() doesn't always move forwards
Date Mon, 15 Jun 2009 22:10:07 GMT

    [ https://issues.apache.org/jira/browse/LUCENE-1583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12719811#action_12719811
] 

Paul Elschot commented on LUCENE-1583:
--------------------------------------

Midnight here, still reading :)

The patch looks good. However, it might be easier to understand by starting like this after
the queue initialisation:
{code}
if (!next()) return false;
{code}
and leave the rest of the code as it is.

I did not run any tests on this, so a thinking cap might well save time.

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


Mime
View raw message