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 2017/01/23 09:39:21 UTC
[1/2] lucene-solr:branch_6x: LUCENE-7643,
SOLR-10013: Reenable the single-value optimization.
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x 3c12fadb5 -> a5b5df419
refs/heads/master 5bdc492c9 -> 6693c261e
LUCENE-7643,SOLR-10013: Reenable the single-value optimization.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/a5b5df41
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/a5b5df41
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/a5b5df41
Branch: refs/heads/branch_6x
Commit: a5b5df419c7f5bc1a94bc2fa0c1b8ba87b8159f8
Parents: 3c12fad
Author: Adrien Grand <jp...@gmail.com>
Authored: Mon Jan 23 10:32:18 2017 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Mon Jan 23 10:38:56 2017 +0100
----------------------------------------------------------------------
.../SortedNumericDocValuesRangeQuery.java | 6 +--
.../lucene/search/TestDocValuesQueries.java | 55 +++++++-------------
.../lucene/search/TestDocValuesRangeQuery.java | 34 ------------
3 files changed, 20 insertions(+), 75 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a5b5df41/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
index c4bfb29..cc93d28 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
@@ -102,18 +102,16 @@ abstract class SortedNumericDocValuesRangeQuery extends Query {
if (values == null) {
return null;
}
- final NumericDocValues singleton = null; // TODO: LUCENE-7649, re-consider optimization that broke SOLR-10013
- // final NumericDocValues singleton = DocValues.unwrapSingleton(values);
+ final NumericDocValues singleton = DocValues.unwrapSingleton(values);
final TwoPhaseIterator iterator;
final DocIdSetIterator approximation = DocIdSetIterator.all(context.reader().maxDoc());
if (singleton != null) {
- assert false : "imposible code -- or: someone re-enabled singleton optinization w/o reading the whole method";
final Bits docsWithField = DocValues.unwrapSingletonBits(values);
iterator = new TwoPhaseIterator(approximation) {
@Override
public boolean matches() throws IOException {
final long value = singleton.get(approximation.docID());
- return (value != 0 || docsWithField.get(approximation.docID()))
+ return (value != 0 || docsWithField == null || docsWithField.get(approximation.docID()))
&& value >= lowerValue && value <= upperValue;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a5b5df41/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java b/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java
index 6cb0460..40a8369 100644
--- a/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java
+++ b/lucene/core/src/test/org/apache/lucene/search/TestDocValuesQueries.java
@@ -30,24 +30,36 @@ import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.NumericUtils;
import org.apache.lucene.util.TestUtil;
public class TestDocValuesQueries extends LuceneTestCase {
public void testDuelPointRangeSortedNumericRangeQuery() throws IOException {
- doTestDuelPointRangeNumericRangeQuery(true, 1);
+ doTestDuelPointRangeNumericRangeQuery(true, 0, 1);
+ }
+
+ // We test the all-set case explicitly since it triggers different code paths
+ // given that the docsWithField will be null in that case
+ public void testDuelPointRangeSortedNumericRangeQueryAllSet() throws IOException {
+ doTestDuelPointRangeNumericRangeQuery(true, 1, 1);
}
public void testDuelPointRangeMultivaluedSortedNumericRangeQuery() throws IOException {
- doTestDuelPointRangeNumericRangeQuery(true, 3);
+ doTestDuelPointRangeNumericRangeQuery(true, 0, 3);
}
public void testDuelPointRangeNumericRangeQuery() throws IOException {
- doTestDuelPointRangeNumericRangeQuery(false, 1);
+ doTestDuelPointRangeNumericRangeQuery(false, 0, 1);
+ }
+
+ // We test the all-set case explicitly since it triggers different code paths
+ // given that the docsWithField will be null in that case
+ public void testDuelPointRangeNumericRangeQueryAllSet() throws IOException {
+ doTestDuelPointRangeNumericRangeQuery(false, 1, 1);
}
- private void doTestDuelPointRangeNumericRangeQuery(boolean sortedNumeric, int maxValuesPerDoc) throws IOException {
+ private void doTestDuelPointRangeNumericRangeQuery(boolean sortedNumeric,
+ int minValuesPerDoc, int maxValuesPerDoc) throws IOException {
final int iters = atLeast(10);
for (int iter = 0; iter < iters; ++iter) {
Directory dir = newDirectory();
@@ -55,7 +67,7 @@ public class TestDocValuesQueries extends LuceneTestCase {
final int numDocs = atLeast(100);
for (int i = 0; i < numDocs; ++i) {
Document doc = new Document();
- final int numValues = TestUtil.nextInt(random(), 0, maxValuesPerDoc);
+ final int numValues = TestUtil.nextInt(random(), minValuesPerDoc, maxValuesPerDoc);
for (int j = 0; j < numValues; ++j) {
final long value = TestUtil.nextLong(random(), -100, 10000);
if (sortedNumeric) {
@@ -236,36 +248,5 @@ public class TestDocValuesQueries extends LuceneTestCase {
reader.close();
dir.close();
}
-
- public void testSortedNumericNPE() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
- double[] nums = {-1.7147449030215377E-208, -1.6887024655302576E-11, 1.534911516604164E113, 0.0,
- 2.6947996404505155E-166, -2.649722021970773E306, 6.138239235731689E-198, 2.3967090122610808E111};
- for (int i = 0; i < nums.length; ++i) {
- Document doc = new Document();
- doc.add(new SortedNumericDocValuesField("dv", NumericUtils.doubleToSortableLong(nums[i])));
- iw.addDocument(doc);
- }
- iw.commit();
- final IndexReader reader = iw.getReader();
- final IndexSearcher searcher = newSearcher(reader);
- iw.close();
-
- final long lo = NumericUtils.doubleToSortableLong(8.701032080293731E-226);
- final long hi = NumericUtils.doubleToSortableLong(2.0801416404385346E-41);
-
- Query query = SortedNumericDocValuesField.newRangeQuery("dv", lo, hi);
- // TODO: assert expected matches
- searcher.search(query, searcher.reader.maxDoc(), Sort.INDEXORDER);
-
- // swap order, should still work
- query = SortedNumericDocValuesField.newRangeQuery("dv", hi, lo);
- // TODO: assert expected matches
- searcher.search(query, searcher.reader.maxDoc(), Sort.INDEXORDER);
-
- reader.close();
- dir.close();
- }
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a5b5df41/lucene/sandbox/src/test/org/apache/lucene/search/TestDocValuesRangeQuery.java
----------------------------------------------------------------------
diff --git a/lucene/sandbox/src/test/org/apache/lucene/search/TestDocValuesRangeQuery.java b/lucene/sandbox/src/test/org/apache/lucene/search/TestDocValuesRangeQuery.java
index c5ca64f..2f79679 100644
--- a/lucene/sandbox/src/test/org/apache/lucene/search/TestDocValuesRangeQuery.java
+++ b/lucene/sandbox/src/test/org/apache/lucene/search/TestDocValuesRangeQuery.java
@@ -270,38 +270,4 @@ public class TestDocValuesRangeQuery extends LuceneTestCase {
dir.close();
}
- public void testLongRangeBoundaryValues() throws IOException {
- Directory dir = newDirectory();
- RandomIndexWriter iw = new RandomIndexWriter(random(), dir);
-
- Document doc = new Document();
- doc.add(new SortedNumericDocValuesField("dv", 100l));
- iw.addDocument(doc);
-
- doc = new Document();
- doc.add(new SortedNumericDocValuesField("dv", 200l));
- iw.addDocument(doc);
-
- iw.commit();
-
- final IndexReader reader = iw.getReader();
- final IndexSearcher searcher = newSearcher(reader, false);
- iw.close();
-
- Long min = Long.MIN_VALUE;
- Long max = Long.MIN_VALUE;
- Query query = DocValuesRangeQuery.newLongRange("dv", min, max, true, false);
- TopDocs td = searcher.search(query, searcher.reader.maxDoc(), Sort.INDEXORDER);
- assertEquals(0, td.totalHits);
-
- min = Long.MAX_VALUE;
- max = Long.MAX_VALUE;
- query = DocValuesRangeQuery.newLongRange("dv", min, max, false, true);
- td = searcher.search(query, searcher.reader.maxDoc(), Sort.INDEXORDER);
- assertEquals(0, td.totalHits);
-
- reader.close();
- dir.close();
- }
-
}
[2/2] lucene-solr:master: LUCENE-7643,
SOLR-10013: Reenable the single-value optimization.
Posted by jp...@apache.org.
LUCENE-7643,SOLR-10013: Reenable the single-value optimization.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6693c261
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6693c261
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6693c261
Branch: refs/heads/master
Commit: 6693c261e5782bc49dea92002745a91215c4166e
Parents: 5bdc492
Author: Adrien Grand <jp...@gmail.com>
Authored: Mon Jan 23 10:31:44 2017 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Mon Jan 23 10:39:06 2017 +0100
----------------------------------------------------------------------
.../lucene/document/SortedNumericDocValuesRangeQuery.java | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6693c261/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
index d5f75a7..18805b2 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
@@ -19,6 +19,7 @@ package org.apache.lucene.document;
import java.io.IOException;
import java.util.Objects;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
@@ -99,11 +100,9 @@ abstract class SortedNumericDocValuesRangeQuery extends Query {
if (values == null) {
return null;
}
- final NumericDocValues singleton = null; // TODO: LUCENE-7649, re-consider optimization that broke SOLR-10013
- // final NumericDocValues singleton = DocValues.unwrapSingleton(values);
+ final NumericDocValues singleton = DocValues.unwrapSingleton(values);
final TwoPhaseIterator iterator;
if (singleton != null) {
- assert false : "imposible code -- or: someone re-enabled singleton optinization w/o reading the whole method";
iterator = new TwoPhaseIterator(singleton) {
@Override
public boolean matches() throws IOException {