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 {