You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2016/10/31 09:55:09 UTC

[1/2] lucene-solr:master: LUCENE-7528: Fix Lucene54's advanceExact impl in the sparse case.

Repository: lucene-solr
Updated Branches:
  refs/heads/master 2ad2fca41 -> 66c90a968


LUCENE-7528: Fix Lucene54's advanceExact impl in the sparse case.


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

Branch: refs/heads/master
Commit: 66c90a9683407eee52e85120cb1e80fd9dd905f5
Parents: 325b74e
Author: Adrien Grand <jp...@gmail.com>
Authored: Mon Oct 31 10:36:26 2016 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Mon Oct 31 10:54:54 2016 +0100

----------------------------------------------------------------------
 .../lucene54/Lucene54DocValuesProducer.java     |  2 +-
 .../lucene54/TestLucene54DocValuesFormat.java   | 27 ++++++++++++++++++++
 2 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/66c90a96/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene54/Lucene54DocValuesProducer.java
----------------------------------------------------------------------
diff --git a/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene54/Lucene54DocValuesProducer.java b/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene54/Lucene54DocValuesProducer.java
index f1c169c..a35f503 100644
--- a/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene54/Lucene54DocValuesProducer.java
+++ b/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene54/Lucene54DocValuesProducer.java
@@ -715,7 +715,7 @@ final class Lucene54DocValuesProducer extends DocValuesProducer implements Close
       }
       --index;
       doc = target;
-      return false;
+      return index >= 0 && docIds.get(index) == target;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/66c90a96/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene54/TestLucene54DocValuesFormat.java
----------------------------------------------------------------------
diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene54/TestLucene54DocValuesFormat.java b/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene54/TestLucene54DocValuesFormat.java
index b231716..a761dfc 100644
--- a/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene54/TestLucene54DocValuesFormat.java
+++ b/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene54/TestLucene54DocValuesFormat.java
@@ -488,6 +488,33 @@ public class TestLucene54DocValuesFormat extends BaseCompressingDocValuesFormatT
         }
       }
 
+      // advanceExact
+      for (int i = 0; i < 2000; ++i) {
+        sparseValues.reset();
+        if (random().nextBoolean() && docIds.length > 0) {
+          sparseValues.advance(docIds[TestUtil.nextInt(random(), 0, docIds.length - 1)]);
+        }
+
+        final int target = TestUtil.nextInt(random(), Math.max(0, sparseValues.docID()), maxDoc - 1);
+        final boolean exists = sparseValues.advanceExact(target);
+        
+        final int index = Arrays.binarySearch(docIds, target);
+        assertEquals(index >= 0, exists);
+        assertEquals(target, sparseValues.docID());
+
+        final boolean exists2 = sparseValues.advanceExact(target);
+        assertEquals(index >= 0, exists2);
+        assertEquals(target, sparseValues.docID());
+
+        final int nextIndex = index >= 0 ? index + 1 : -1 - index;
+        if (nextIndex >= docIds.length) {
+          assertEquals(DocIdSetIterator.NO_MORE_DOCS, sparseValues.nextDoc());
+        } else {
+          assertEquals(docIds[nextIndex], sparseValues.nextDoc());
+        }
+      }
+      
+
       final SparseNumericDocValuesRandomAccessWrapper raWrapper = new SparseNumericDocValuesRandomAccessWrapper(sparseValues, missingValue);
 
       // random-access


[2/2] lucene-solr:master: LUCENE-7529: Fix argument checks of MultiDocValues' advanceExact impls.

Posted by jp...@apache.org.
LUCENE-7529: Fix argument checks of MultiDocValues' advanceExact impls.


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

Branch: refs/heads/master
Commit: 325b74e0e3e9c9ce265d8d7844f01209394b920a
Parents: 2ad2fca
Author: Adrien Grand <jp...@gmail.com>
Authored: Mon Oct 31 10:34:48 2016 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Mon Oct 31 10:54:54 2016 +0100

----------------------------------------------------------------------
 .../org/apache/lucene/index/MultiDocValues.java  | 10 +++++-----
 .../apache/lucene/index/TestMultiDocValues.java  | 19 +++++++++++++++++--
 2 files changed, 22 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/325b74e0/lucene/core/src/java/org/apache/lucene/index/MultiDocValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MultiDocValues.java b/lucene/core/src/java/org/apache/lucene/index/MultiDocValues.java
index 51d684d..3970e0a 100644
--- a/lucene/core/src/java/org/apache/lucene/index/MultiDocValues.java
+++ b/lucene/core/src/java/org/apache/lucene/index/MultiDocValues.java
@@ -140,7 +140,7 @@ public class MultiDocValues {
 
       @Override
       public boolean advanceExact(int targetDocID) throws IOException {
-        if (targetDocID <= docID) {
+        if (targetDocID < docID) {
           throw new IllegalArgumentException("can only advance beyond current document: on docID=" + docID + " but targetDocID=" + targetDocID);
         }
         int readerIndex = ReaderUtil.subIndex(targetDocID, leaves);
@@ -266,7 +266,7 @@ public class MultiDocValues {
 
       @Override
       public boolean advanceExact(int targetDocID) throws IOException {
-        if (targetDocID <= docID) {
+        if (targetDocID < docID) {
           throw new IllegalArgumentException("can only advance beyond current document: on docID=" + docID + " but targetDocID=" + targetDocID);
         }
         int readerIndex = ReaderUtil.subIndex(targetDocID, leaves);
@@ -390,7 +390,7 @@ public class MultiDocValues {
 
       @Override
       public boolean advanceExact(int targetDocID) throws IOException {
-        if (targetDocID <= docID) {
+        if (targetDocID < docID) {
           throw new IllegalArgumentException("can only advance beyond current document: on docID=" + docID + " but targetDocID=" + targetDocID);
         }
         int readerIndex = ReaderUtil.subIndex(targetDocID, leaves);
@@ -525,7 +525,7 @@ public class MultiDocValues {
 
       @Override
       public boolean advanceExact(int targetDocID) throws IOException {
-        if (targetDocID <= docID) {
+        if (targetDocID < docID) {
           throw new IllegalArgumentException("can only advance beyond current document: on docID=" + docID + " but targetDocID=" + targetDocID);
         }
         int readerIndex = ReaderUtil.subIndex(targetDocID, leaves);
@@ -1007,7 +1007,7 @@ public class MultiDocValues {
     
     @Override
     public boolean advanceExact(int targetDocID) throws IOException {
-      if (targetDocID <= docID) {
+      if (targetDocID < docID) {
         throw new IllegalArgumentException("can only advance beyond current document: on docID=" + docID + " but targetDocID=" + targetDocID);
       }
       int readerIndex = ReaderUtil.subIndex(targetDocID, docStarts);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/325b74e0/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java b/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
index f6669d5..7d4d74f 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestMultiDocValues.java
@@ -71,7 +71,8 @@ public class TestMultiDocValues extends LuceneTestCase {
       assertEquals(single.longValue(), multi.longValue());
     }
     testRandomAdvance(merged.getNumericDocValues("numbers"), MultiDocValues.getNumericValues(ir, "numbers"));
-    
+    testRandomAdvanceExact(merged.getNumericDocValues("numbers"), MultiDocValues.getNumericValues(ir, "numbers"), merged.maxDoc());
+
     ir.close();
     ir2.close();
     dir.close();
@@ -113,6 +114,7 @@ public class TestMultiDocValues extends LuceneTestCase {
       assertEquals(expected, actual);
     }
     testRandomAdvance(merged.getBinaryDocValues("bytes"), MultiDocValues.getBinaryValues(ir, "bytes"));
+    testRandomAdvanceExact(merged.getBinaryDocValues("bytes"), MultiDocValues.getBinaryValues(ir, "bytes"), merged.maxDoc());
 
     ir.close();
     ir2.close();
@@ -164,6 +166,7 @@ public class TestMultiDocValues extends LuceneTestCase {
       assertEquals(single.ordValue(), multi.ordValue());
     }
     testRandomAdvance(merged.getSortedDocValues("bytes"), MultiDocValues.getSortedValues(ir, "bytes"));
+    testRandomAdvanceExact(merged.getSortedDocValues("bytes"), MultiDocValues.getSortedValues(ir, "bytes"), merged.maxDoc());
     ir.close();
     ir2.close();
     dir.close();
@@ -209,6 +212,7 @@ public class TestMultiDocValues extends LuceneTestCase {
       assertEquals(expected, actual);
     }
     testRandomAdvance(merged.getSortedDocValues("bytes"), MultiDocValues.getSortedValues(ir, "bytes"));
+    testRandomAdvanceExact(merged.getSortedDocValues("bytes"), MultiDocValues.getSortedValues(ir, "bytes"), merged.maxDoc());
     
     ir.close();
     ir2.close();
@@ -275,6 +279,7 @@ public class TestMultiDocValues extends LuceneTestCase {
       }
     }
     testRandomAdvance(merged.getSortedSetDocValues("bytes"), MultiDocValues.getSortedSetValues(ir, "bytes"));
+    testRandomAdvanceExact(merged.getSortedSetDocValues("bytes"), MultiDocValues.getSortedSetValues(ir, "bytes"), merged.maxDoc());
     
     ir.close();
     ir2.close();
@@ -341,7 +346,8 @@ public class TestMultiDocValues extends LuceneTestCase {
       }
     }
     testRandomAdvance(merged.getSortedSetDocValues("bytes"), MultiDocValues.getSortedSetValues(ir, "bytes"));
-    
+    testRandomAdvanceExact(merged.getSortedSetDocValues("bytes"), MultiDocValues.getSortedSetValues(ir, "bytes"), merged.maxDoc());
+
     ir.close();
     ir2.close();
     dir.close();
@@ -391,6 +397,7 @@ public class TestMultiDocValues extends LuceneTestCase {
       }
     }
     testRandomAdvance(merged.getSortedNumericDocValues("nums"), MultiDocValues.getSortedNumericValues(ir, "nums"));
+    testRandomAdvanceExact(merged.getSortedNumericDocValues("nums"), MultiDocValues.getSortedNumericValues(ir, "nums"), merged.maxDoc());
     
     ir.close();
     ir2.close();
@@ -410,4 +417,12 @@ public class TestMultiDocValues extends LuceneTestCase {
       }
     }
   }
+
+  private void testRandomAdvanceExact(DocValuesIterator iter1, DocValuesIterator iter2, int maxDoc) throws IOException {
+    for (int target = random().nextInt(Math.min(maxDoc, 10)); target < maxDoc; target += random().nextInt(10)) {
+      final boolean exists1 = iter1.advanceExact(target);
+      final boolean exists2 = iter2.advanceExact(target);
+      assertEquals(exists1, exists2);
+    }
+  }
 }