[
https://issues.apache.org/jira/browse/LUCENE-1583?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12721858#action_12721858
]
Mark Miller commented on LUCENE-1583:
-------------------------------------
That change would always call next once before skipping though right? And the
way the patch is, you would only call next if no skipping occurred? I know its
semantically the same, and I guess the clarity is probably worth any (probably
extremely minor) slowdown?
> 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: [email protected]
For additional commands, e-mail: [email protected]