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 2018/04/26 10:41:25 UTC

[2/3] lucene-solr:branch_7x: LUCENE-8196: Fix unordered case with non-matching subinterval

LUCENE-8196: Fix unordered case with non-matching subinterval


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/345fdff4
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/345fdff4
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/345fdff4

Branch: refs/heads/branch_7x
Commit: 345fdff47cc6f09d774afefd46b2a653d0da7fa3
Parents: 0d1b4f2
Author: Alan Woodward <ro...@apache.org>
Authored: Thu Apr 26 11:27:33 2018 +0100
Committer: Alan Woodward <ro...@apache.org>
Committed: Thu Apr 26 11:27:58 2018 +0100

----------------------------------------------------------------------
 .../search/intervals/IntervalFunction.java      |  4 +++-
 .../search/intervals/TestIntervalQuery.java     | 12 ++++++++++
 .../lucene/search/intervals/TestIntervals.java  | 25 ++++++++++++++++++--
 3 files changed, 38 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/345fdff4/lucene/sandbox/src/java/org/apache/lucene/search/intervals/IntervalFunction.java
----------------------------------------------------------------------
diff --git a/lucene/sandbox/src/java/org/apache/lucene/search/intervals/IntervalFunction.java b/lucene/sandbox/src/java/org/apache/lucene/search/intervals/IntervalFunction.java
index c550a72..ddd891f 100644
--- a/lucene/sandbox/src/java/org/apache/lucene/search/intervals/IntervalFunction.java
+++ b/lucene/sandbox/src/java/org/apache/lucene/search/intervals/IntervalFunction.java
@@ -238,7 +238,9 @@ abstract class IntervalFunction {
       queueEnd = start = end = -1;
       this.queue.clear();
       for (IntervalIterator it : subIterators) {
-        it.nextInterval();
+        if (it.nextInterval() == NO_MORE_INTERVALS) {
+          break;
+        }
         queue.add(it);
         updateRightExtreme(it);
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/345fdff4/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervalQuery.java
----------------------------------------------------------------------
diff --git a/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervalQuery.java b/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervalQuery.java
index de7341e..8f0623e 100644
--- a/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervalQuery.java
+++ b/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervalQuery.java
@@ -166,4 +166,16 @@ public class TestIntervalQuery extends LuceneTestCase {
     checkHits(q, new int[]{ 6, 7 });
   }
 
+  public void testUnordered() throws IOException {
+    Query q = new IntervalQuery(field,
+        Intervals.unordered(
+            Intervals.term("w1"),
+            Intervals.ordered(
+                Intervals.term("w3"),
+                Intervals.term("yy")
+            )
+        )
+    );
+    checkHits(q, new int[]{3});
+  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/345fdff4/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervals.java
----------------------------------------------------------------------
diff --git a/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervals.java b/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervals.java
index 8f91a7f..9405f79 100644
--- a/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervals.java
+++ b/lucene/sandbox/src/test/org/apache/lucene/search/intervals/TestIntervals.java
@@ -20,6 +20,7 @@ package org.apache.lucene.search.intervals;
 import java.io.IOException;
 
 import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.CharArraySet;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
@@ -60,7 +61,7 @@ public class TestIntervals extends LuceneTestCase {
 
   private static Directory directory;
   private static IndexSearcher searcher;
-  private static Analyzer analyzer = new StandardAnalyzer();
+  private static Analyzer analyzer = new StandardAnalyzer(CharArraySet.EMPTY_SET);
 
   @BeforeClass
   public static void setupIndex() throws IOException {
@@ -172,7 +173,7 @@ public class TestIntervals extends LuceneTestCase {
   }
 
   public void testIntervalDisjunction() throws IOException {
-    checkIntervals(Intervals.or(Intervals.term("pease"), Intervals.term("hot")), "field1", 4, new int[][]{
+    checkIntervals(Intervals.or(Intervals.term("pease"), Intervals.term("hot"), Intervals.term("notMatching")), "field1", 4, new int[][]{
         {},
         { 0, 0, 2, 2, 3, 3, 6, 6, 17, 17},
         { 0, 0, 3, 3, 5, 5, 6, 6, 21, 21},
@@ -194,4 +195,24 @@ public class TestIntervals extends LuceneTestCase {
     });
   }
 
+  public void testNesting2() throws IOException {
+    checkIntervals(
+        Intervals.unordered(
+            Intervals.ordered(
+                Intervals.term("like"),
+                Intervals.term("it"),
+                Intervals.term("cold")
+            ),
+            Intervals.term("pease")
+        ),
+        "field1", 2, new int[][]{
+            {},
+            {6, 21},
+            {6, 17},
+            {},
+            {},
+            {}
+        });
+  }
+
 }