You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ji...@apache.org on 2018/01/05 11:39:09 UTC
lucene-solr:branch_7_2: LUCENE-8117: Fix advanceExact on
SortedNumericDocValues produced by Lucene54DocValues.
Repository: lucene-solr
Updated Branches:
refs/heads/branch_7_2 bd83fe48e -> 420461337
LUCENE-8117: Fix advanceExact on SortedNumericDocValues produced by Lucene54DocValues.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/42046133
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/42046133
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/42046133
Branch: refs/heads/branch_7_2
Commit: 420461337070b3316634e5ac16a5b65cc99e8f87
Parents: bd83fe4
Author: Jim Ferenczi <ji...@apache.org>
Authored: Fri Jan 5 12:37:42 2018 +0100
Committer: Jim Ferenczi <ji...@apache.org>
Committed: Fri Jan 5 12:38:51 2018 +0100
----------------------------------------------------------------------
.../lucene54/Lucene54DocValuesProducer.java | 2 +
.../lucene54/TestLucene54DocValuesFormat.java | 74 ++++++++++++++++++++
2 files changed, 76 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/42046133/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 a35f503..8e4da03 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
@@ -1172,6 +1172,7 @@ final class Lucene54DocValuesProducer extends DocValuesProducer implements Close
docID = target;
startOffset = ordIndex.get(docID);
endOffset = ordIndex.get(docID+1L);
+ upto = startOffset;
return endOffset > startOffset;
}
@@ -1244,6 +1245,7 @@ final class Lucene54DocValuesProducer extends DocValuesProducer implements Close
int ord = (int) ordinals.get(docID);
startOffset = offsets[ord];
endOffset = offsets[ord+1];
+ upto = startOffset;
return endOffset > startOffset;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/42046133/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 a761dfc..3dbf11a 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
@@ -637,4 +637,78 @@ public class TestLucene54DocValuesFormat extends BaseCompressingDocValuesFormatT
dir.close();
}
}
+
+ public void testSortedNumericAdvanceExact() throws Exception {
+ // test SORTED_WITH_ADDRESSES
+ doTestSortedNumericAdvanceExact(TestUtil.nextInt(random(), 100, 200), 17, null);
+ // test SORTED_SET_TABLE
+ long[] values = new long[255];
+ for (int i = 0; i < values.length; i++) {
+ values[i] = random().nextLong();
+ }
+ doTestSortedNumericAdvanceExact(TestUtil.nextInt(random(), 50, 100), 4, values);
+ }
+
+ private void doTestSortedNumericAdvanceExact(int numDocs, int maxValuesPerDoc, long[] possibleValues) throws Exception {
+ Directory dir = newFSDirectory(createTempDir());
+ IndexWriterConfig conf = newIndexWriterConfig().setMergePolicy(newLogMergePolicy());
+ conf.setMergeScheduler(new SerialMergeScheduler());
+ // set to duel against a codec which has ordinals:
+ final PostingsFormat pf = TestUtil.getPostingsFormatWithOrds(random());
+ final DocValuesFormat dv = new Lucene54DocValuesFormat();
+ conf.setCodec(new AssertingCodec() {
+ @Override
+ public PostingsFormat getPostingsFormatForField(String field) {
+ return pf;
+ }
+
+ @Override
+ public DocValuesFormat getDocValuesFormatForField(String field) {
+ return dv;
+ }
+ });
+ IndexWriter writer = new IndexWriter(dir, conf);
+
+ List<long[]> expected = new ArrayList<>();
+ for (int i = 0; i < numDocs; i++) {
+ Document doc = new Document();
+ int numValues = random().nextInt(maxValuesPerDoc);
+ // create a random list of strings
+ long[] values = new long[numValues];
+ for (int v = 0; v < numValues; v++) {
+ final long value;
+ if (possibleValues == null) {
+ value = random().nextLong();
+ } else {
+ value = possibleValues[TestUtil.nextInt(random(), 0, possibleValues.length-1)];
+ }
+ values[v] = value;
+ doc.add(new SortedNumericDocValuesField("numeric", value));
+ }
+ Arrays.sort(values);
+ expected.add(values);
+ writer.addDocument(doc);
+ }
+ writer.commit();
+ writer.forceMerge(1);
+ DirectoryReader ir = DirectoryReader.open(writer);
+ writer.close();
+ LeafReader ar = getOnlyLeafReader(ir);
+ for (int i = 0; i < numDocs; i++) {
+ int doc = TestUtil.nextInt(random(), 0, numDocs-1);
+ SortedNumericDocValues values = ar.getSortedNumericDocValues("numeric");
+ long[] array = expected.get(doc);
+ if (array.length == 0) {
+ assertFalse(values.advanceExact(doc));
+ } else {
+ assertTrue(values.advanceExact(doc));
+ assertEquals(array.length, values.docValueCount());
+ for (int j = 0; j < values.docValueCount(); j++) {
+ assertEquals(array[j], values.nextValue());
+ }
+ }
+ }
+ ir.close();
+ dir.close();
+ }
}