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);
+ }
+ }
}