You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by ma...@apache.org on 2009/07/14 22:56:51 UTC

svn commit: r794063 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/spans/SpanOrQuery.java src/test/org/apache/lucene/search/spans/TestSpans.java

Author: markrmiller
Date: Tue Jul 14 20:56:50 2009
New Revision: 794063

URL: http://svn.apache.org/viewvc?rev=794063&view=rev
Log:
LUCENE-1583: SpanOrQuery skipTo() doesn't always move forwards as Spans documentation indicates it should. 

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanOrQuery.java
    lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/trunk/CHANGES.txt?rev=794063&r1=794062&r2=794063&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Tue Jul 14 20:56:50 2009
@@ -378,6 +378,9 @@
 
 18. LUCENE-1718: Fix termInfosIndexDivisor to carry over to reopened
     readers (Mike McCandless)
+    
+19. LUCENE-1583: SpanOrQuery skipTo() doesn't always move forwards as Spans
+	documentation indicates it should.  (Moti Nisenson via Mark Miller)
 
 New features
 

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanOrQuery.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanOrQuery.java?rev=794063&r1=794062&r2=794063&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanOrQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/spans/SpanOrQuery.java Tue Jul 14 20:56:50 2009
@@ -215,16 +215,21 @@
           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;
           }
-
-          return queue.size() != 0;
+  
+          if (skipCalled) {
+            return queue.size() != 0;
+          }
+          return next();
         }
 
         public int doc() { return top().doc(); }

Modified: lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java?rev=794063&r1=794062&r2=794063&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/search/spans/TestSpans.java Tue Jul 14 20:56:50 2009
@@ -331,6 +331,23 @@
     assertFalse("final next", spans.next());
   }
   
+  public void testSpanOrMovesForward() throws Exception {
+    Spans spans = orSpans(new String[] {"w1", "xx"});
+
+    spans.next();
+    int doc = spans.doc();
+    assertEquals(0, doc);
+    
+    spans.skipTo(0);
+    doc = spans.doc();
+    
+    // LUCENE-1583:
+    // according to Spans, a skipTo to the same doc or less
+    // should still call next() on the underlying Spans
+    assertEquals(1, doc);
+
+  }
+  
   public void testSpanOrDouble() throws Exception {
     Spans spans = orSpans(new String[] {"w5", "yy"});
     tstNextSpans(spans, 0, 4, 5);