You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2012/11/20 18:03:34 UTC

svn commit: r1411748 - in /lucene/dev/branches/LUCENE-2878/lucene/core/src: java/org/apache/lucene/search/intervals/ test/org/apache/lucene/search/intervals/

Author: romseygeek
Date: Tue Nov 20 17:03:33 2012
New Revision: 1411748

URL: http://svn.apache.org/viewvc?rev=1411748&view=rev
Log:
LUCENE-2878: Add more tests for Brouwerian Query + fixes

Modified:
    lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java
    lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java
    lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java
    lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java

Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/BrouwerianIntervalIterator.java Tue Nov 20 17:03:33 2012
@@ -56,7 +56,8 @@ public class BrouwerianIntervalIterator 
   @Override
   public int scorerAdvanced(int docId) throws IOException {
     minuend.scorerAdvanced(docId);
-    subtracted.scorerAdvanced(docId);
+    if (subtracted.docID() <= docId)
+      subtracted.scorerAdvanced(docId);
     subtractedInterval = Interval.INFINITE_INTERVAL;
     return docId;
   }
@@ -94,5 +95,10 @@ public class BrouwerianIntervalIterator 
   public int matchDistance() {
     return minuend.matchDistance();
   }
+
+  @Override
+  public int docID() {
+    return minuend.docID();
+  }
   
 }

Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/NonOverlappingQuery.java Tue Nov 20 17:03:33 2012
@@ -134,7 +134,7 @@ public final class NonOverlappingQuery e
       if (subScorer == null) {
         return scorer;
       }
-      return scorer == null ? null : new PositionFilterScorer(this, scorer, subScorer, factory);
+      return scorer == null ? null : new BrouwerianScorer(this, scorer, subScorer, factory);
     }
     
     @Override
@@ -181,25 +181,25 @@ public final class NonOverlappingQuery e
     
   }
   
-  final class PositionFilterScorer extends Scorer {
+  final class BrouwerianScorer extends Scorer {
 
-    private final Scorer other;
+    private final Scorer minuend;
     private IntervalIterator filter;
     private final Scorer subtracted;
     Interval current;
     private final ScorerFactory factory;
 
-    public PositionFilterScorer(Weight weight, Scorer other, Scorer subtracted, ScorerFactory factory) throws IOException {
+    public BrouwerianScorer(Weight weight, Scorer minuend, Scorer subtracted, ScorerFactory factory) throws IOException {
       super(weight);
-      this.other = other;
+      this.minuend = minuend;
       this.subtracted = subtracted;
-      this.filter = new BrouwerianIntervalIterator(other, false, other.intervals(false), subtracted.intervals(false));
+      this.filter = new BrouwerianIntervalIterator(minuend, false, minuend.intervals(false), subtracted.intervals(false));
       this.factory = factory;
     }
 
     @Override
     public float score() throws IOException {
-      return other.score();
+      return minuend.score();
     }
 
     @Override
@@ -212,10 +212,11 @@ public final class NonOverlappingQuery e
 
           @Override
           public int scorerAdvanced(int docId) throws IOException {
-            docId = minuted.advance(docId);
+            int mId = minuted.advance(docId);
             subtracted.advance(docId);
-            brouwerianIntervalIterator.scorerAdvanced(docId);
-            return docId;
+            if (mId <= docId)
+              return brouwerianIntervalIterator.scorerAdvanced(docId);
+            return mId;
           }
 
           @Override
@@ -284,17 +285,17 @@ public final class NonOverlappingQuery e
 
     @Override
     public int docID() {
-      return other.docID();
+      return minuend.docID();
     }
 
     @Override
     public int nextDoc() throws IOException {
       int docId = -1;
-      while ((docId = other.nextDoc()) != Scorer.NO_MORE_DOCS) {
+      while ((docId = minuend.nextDoc()) != Scorer.NO_MORE_DOCS) {
         subtracted.advance(docId);
         filter.scorerAdvanced(docId);
         if ((current = filter.next()) != null) { // just check if there is a position that matches!
-          return other.docID();
+          return minuend.docID();
         }
       }
       return Scorer.NO_MORE_DOCS;
@@ -302,7 +303,7 @@ public final class NonOverlappingQuery e
 
     @Override
     public int advance(int target) throws IOException {
-      int docId = other.advance(target);
+      int docId = minuend.advance(target);
       subtracted.advance(docId);
       if (docId == Scorer.NO_MORE_DOCS) {
         return NO_MORE_DOCS;
@@ -310,15 +311,15 @@ public final class NonOverlappingQuery e
       do {
         filter.scorerAdvanced(docId);
         if ((current = filter.next()) != null) {
-          return other.docID();
+          return minuend.docID();
         }
-      } while ((docId = other.nextDoc()) != Scorer.NO_MORE_DOCS);
+      } while ((docId = minuend.nextDoc()) != Scorer.NO_MORE_DOCS);
       return NO_MORE_DOCS;
     }
 
     @Override
     public float freq() throws IOException {
-      return other.freq();
+      return minuend.freq();
     }
 
   }

Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/java/org/apache/lucene/search/intervals/UnorderedNearQuery.java Tue Nov 20 17:03:33 2012
@@ -36,6 +36,8 @@ import org.apache.lucene.search.Query;
 
 public class UnorderedNearQuery extends IntervalFilterQuery {
 
+  private final int slop;
+
   /**
    * Constructs an OrderedNearQuery
    * @param slop the maximum distance between the subquery matches
@@ -44,6 +46,7 @@ public class UnorderedNearQuery extends 
    */
   public UnorderedNearQuery(int slop, boolean collectLeaves, Query... subqueries) {
     super(buildBooleanQuery(subqueries), new WithinIntervalFilter(slop + subqueries.length - 2, collectLeaves));
+    this.slop = slop;
   }
 
   /**
@@ -63,5 +66,10 @@ public class UnorderedNearQuery extends 
     return bq;
   }
 
+  @Override
+  public String toString() {
+    return "UnorderedNear/" + slop + ":" + super.toString("");
+  }
+
 }
 

Modified: lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java?rev=1411748&r1=1411747&r2=1411748&view=diff
==============================================================================
--- lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java (original)
+++ lucene/dev/branches/LUCENE-2878/lucene/core/src/test/org/apache/lucene/search/intervals/TestBrouwerianQuery.java Tue Nov 20 17:03:33 2012
@@ -81,4 +81,23 @@ public class TestBrouwerianQuery extends
     });
   }
 
+  public void testBrouwerianNonExistentOverlapQuery() throws IOException {
+    Query sub = new UnorderedNearQuery(2, false, makeTermQuery("dog"), makeTermQuery("over"));
+    Query query = makeTermQuery("dog");
+    NonOverlappingQuery q = new NonOverlappingQuery(query, sub);
+
+    checkIntervals(q, searcher, new int[][]{});
+  }
+
+  public void testBrouwerianExistentOverlapQuery() throws IOException {
+    Query sub = new UnorderedNearQuery(1, false, makeTermQuery("dog"), makeTermQuery("over"));
+    Query query = makeTermQuery("dog");
+    NonOverlappingQuery q = new NonOverlappingQuery(query, sub);
+
+    checkIntervals(q, searcher, new int[][]{
+        { 0, 8, 8 },
+        { 1, 8, 8 }
+    });
+  }
+
 }