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 2018/02/12 16:43:18 UTC

[1/2] lucene-solr:branch_7x: LUCENE-8152: Improve consumption of doc-value iterators.

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_7x cda002d9e -> 6ae6ce2f4


LUCENE-8152: Improve consumption of doc-value iterators.


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

Branch: refs/heads/branch_7x
Commit: 6ae6ce2f42b61b117c31149ac87b1cb3d6ffe440
Parents: 9d66dc2
Author: Adrien Grand <jp...@gmail.com>
Authored: Mon Feb 12 14:49:49 2018 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Mon Feb 12 17:43:14 2018 +0100

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |  3 ++
 .../search/join/GlobalOrdinalsCollector.java    | 10 ++-----
 .../lucene/search/join/GlobalOrdinalsQuery.java | 16 ++---------
 .../join/GlobalOrdinalsWithScoreCollector.java  | 20 +++----------
 .../join/GlobalOrdinalsWithScoreQuery.java      | 12 ++------
 .../org/apache/lucene/search/join/JoinUtil.java | 15 ++--------
 .../lucene/search/join/TermsCollector.java      |  5 +---
 .../search/join/TermsWithScoreCollector.java    | 20 +++----------
 .../apache/lucene/search/join/TestJoinUtil.java | 10 ++-----
 .../solr/handler/component/ExpandComponent.java | 11 ++-----
 .../solr/search/CollapsingQParserPlugin.java    | 30 ++++----------------
 .../solr/search/IGainTermsQParserPlugin.java    |  6 +---
 .../TextLogisticRegressionQParserPlugin.java    |  6 +---
 .../facet/FacetFieldProcessorByHashDV.java      | 10 ++-----
 .../org/apache/solr/search/facet/MinMaxAgg.java |  5 +---
 .../solr/search/facet/UniqueMultiDvSlotAcc.java |  5 +---
 .../apache/solr/search/TestRankQueryPlugin.java |  6 +---
 17 files changed, 38 insertions(+), 152 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 6e6c9d3..71a3c06 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -63,6 +63,9 @@ Improvements
 * LUCENE-8127: Speed up rewriteNoScoring when there are no MUST clauses.
   (Michael Braun via Adrien Grand)
 
+* LUCENE-8152: Improve consumption of doc-value iterators. (Horatiu Lazu via
+  Adrien Grand)
+
 Bug Fixes
 
 * LUCENE-8077: Fixed bug in how CheckIndex verifies doc-value iterators.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsCollector.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsCollector.java b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsCollector.java
index 15ce023..83136b7 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsCollector.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsCollector.java
@@ -77,10 +77,7 @@ final class GlobalOrdinalsCollector implements Collector {
 
     @Override
     public void collect(int doc) throws IOException {
-      if (doc > docTermOrds.docID()) {
-        docTermOrds.advance(doc);
-      }
-      if (doc == docTermOrds.docID()) {
+      if (docTermOrds.advanceExact(doc)) {
         long segmentOrd = docTermOrds.ordValue();
         long globalOrd = segmentOrdToGlobalOrdLookup.get(segmentOrd);
         collectedOrds.set(globalOrd);
@@ -102,10 +99,7 @@ final class GlobalOrdinalsCollector implements Collector {
 
     @Override
     public void collect(int doc) throws IOException {
-      if (doc > docTermOrds.docID()) {
-        docTermOrds.advance(doc);
-      }
-      if (doc == docTermOrds.docID()) {
+      if (docTermOrds.advanceExact(doc)) {
         collectedOrds.set(docTermOrds.ordValue());
       }
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsQuery.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsQuery.java b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsQuery.java
index b1c0b91..72dae96 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsQuery.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsQuery.java
@@ -182,11 +182,7 @@ final class GlobalOrdinalsQuery extends Query {
 
         @Override
         public boolean matches() throws IOException {
-          int docID = approximation.docID();
-          if (docID > values.docID()) {
-            values.advance(docID);
-          }
-          if (docID == values.docID()) {
+          if (values.advanceExact(approximation.docID())) {
             final long segmentOrd = values.ordValue();
             final long globalOrd = segmentOrdToGlobalOrdLookup.get(segmentOrd);
             if (foundOrds.get(globalOrd)) {
@@ -220,14 +216,8 @@ final class GlobalOrdinalsQuery extends Query {
 
         @Override
         public boolean matches() throws IOException {
-          int docID = approximation.docID();
-          if (docID > values.docID()) {
-            values.advance(docID);
-          }
-          if (docID == values.docID()) {
-            if (foundOrds.get(values.ordValue())) {
-              return true;
-            }
+          if (values.advanceExact(approximation.docID()) && foundOrds.get(values.ordValue())) {
+            return true;
           }
           return false;
         }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreCollector.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreCollector.java b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreCollector.java
index a557416..45352ef 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreCollector.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreCollector.java
@@ -113,10 +113,7 @@ abstract class GlobalOrdinalsWithScoreCollector implements Collector {
 
     @Override
     public void collect(int doc) throws IOException {
-      if (doc > docTermOrds.docID()) {
-        docTermOrds.advance(doc);
-      }
-      if (doc == docTermOrds.docID()) {
+      if (docTermOrds.advanceExact(doc)) {
         final int globalOrd = (int) segmentOrdToGlobalOrdLookup.get(docTermOrds.ordValue());
         collectedOrds.set(globalOrd);
         float existingScore = scores.getScore(globalOrd);
@@ -145,10 +142,7 @@ abstract class GlobalOrdinalsWithScoreCollector implements Collector {
 
     @Override
     public void collect(int doc) throws IOException {
-      if (doc > docTermOrds.docID()) {
-        docTermOrds.advance(doc);
-      }
-      if (doc == docTermOrds.docID()) {
+      if (docTermOrds.advanceExact(doc)) {
         int segmentOrd = docTermOrds.ordValue();
         collectedOrds.set(segmentOrd);
         float existingScore = scores.getScore(segmentOrd);
@@ -258,10 +252,7 @@ abstract class GlobalOrdinalsWithScoreCollector implements Collector {
 
           @Override
           public void collect(int doc) throws IOException {
-            if (doc > docTermOrds.docID()) {
-              docTermOrds.advance(doc);
-            }
-            if (doc == docTermOrds.docID()) {
+            if (docTermOrds.advanceExact(doc)) {
               final int globalOrd = (int) segmentOrdToGlobalOrdLookup.get(docTermOrds.ordValue());
               collectedOrds.set(globalOrd);
               occurrences.increment(globalOrd);
@@ -276,10 +267,7 @@ abstract class GlobalOrdinalsWithScoreCollector implements Collector {
 
           @Override
           public void collect(int doc) throws IOException {
-            if (doc > docTermOrds.docID()) {
-              docTermOrds.advance(doc);
-            }
-            if (doc == docTermOrds.docID()) {
+            if (docTermOrds.advanceExact(doc)) {
               int segmentOrd = docTermOrds.ordValue();
               collectedOrds.set(segmentOrd);
               occurrences.increment(segmentOrd);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreQuery.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreQuery.java b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreQuery.java
index 7946559..7c361c8 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreQuery.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/GlobalOrdinalsWithScoreQuery.java
@@ -191,11 +191,7 @@ final class GlobalOrdinalsWithScoreQuery extends Query {
 
         @Override
         public boolean matches() throws IOException {
-          int docID = approximation.docID();
-          if (docID > values.docID()) {
-            values.advance(docID);
-          }
-          if (docID == values.docID()) {
+          if (values.advanceExact(approximation.docID())) {
             final long segmentOrd = values.ordValue();
             final int globalOrd = (int) segmentOrdToGlobalOrdLookup.get(segmentOrd);
             if (collector.match(globalOrd)) {
@@ -229,11 +225,7 @@ final class GlobalOrdinalsWithScoreQuery extends Query {
 
         @Override
         public boolean matches() throws IOException {
-          int docID = approximation.docID();
-          if (docID > values.docID()) {
-            values.advance(docID);
-          }
-          if (docID == values.docID()) {
+          if (values.advanceExact(approximation.docID())) {
             final int segmentOrd = values.ordValue();
             if (collector.match(segmentOrd)) {
               score = collector.score(segmentOrd);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java b/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java
index c0f380d..e9c932f 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/JoinUtil.java
@@ -199,10 +199,7 @@ public final class JoinUtil {
 
         @Override
         public void collect(int doc) throws IOException {
-          if (doc > sortedNumericDocValues.docID()) {
-            sortedNumericDocValues.advance(doc);
-          }
-          if (doc == sortedNumericDocValues.docID()) {
+          if (sortedNumericDocValues.advanceExact(doc)) {
             for (int i = 0; i < sortedNumericDocValues.docValueCount(); i++) {
               long value = sortedNumericDocValues.nextValue();
               joinValues.add(value);
@@ -246,15 +243,9 @@ public final class JoinUtil {
         @Override
         public void collect(int doc) throws IOException {
           assert docsInOrder(doc);
-          int dvDocID = numericDocValues.docID();
-          if (dvDocID < doc) {
-            dvDocID = numericDocValues.advance(doc);
-          }
-          long value;
-          if (dvDocID == doc) {
+          long value = 0;
+          if (numericDocValues.advanceExact(doc)) {
             value = numericDocValues.longValue();
-          } else {
-            value = 0;
           }
           joinValues.add(value);
           if (needsScore) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java b/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
index 8475af7..c6f53cb 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/TermsCollector.java
@@ -84,11 +84,8 @@ abstract class TermsCollector<DV> extends DocValuesTermsCollector<DV> {
 
     @Override
     public void collect(int doc) throws IOException {
-      if (docValues.docID() < doc) {
-        docValues.advance(doc);
-      }
       BytesRef term;
-      if (docValues.docID() == doc) {
+      if (docValues.advanceExact(doc)) {
         term = docValues.binaryValue();
       } else {
         term = new BytesRef(BytesRef.EMPTY_BYTES);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java b/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
index 22fc54d..a294949 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/TermsWithScoreCollector.java
@@ -96,11 +96,8 @@ abstract class TermsWithScoreCollector<DV> extends DocValuesTermsCollector<DV>
 
     @Override
     public void collect(int doc) throws IOException {
-      if (docValues.docID() < doc) {
-        docValues.advance(doc);
-      }
       BytesRef value;
-      if (docValues.docID() == doc) {
+      if (docValues.advanceExact(doc)) {
         value = docValues.binaryValue();
       } else {
         value = new BytesRef(BytesRef.EMPTY_BYTES);
@@ -155,11 +152,8 @@ abstract class TermsWithScoreCollector<DV> extends DocValuesTermsCollector<DV>
 
       @Override
       public void collect(int doc) throws IOException {
-        if (docValues.docID() < doc) {
-          docValues.advance(doc);
-        }
         BytesRef value;
-        if (docValues.docID() == doc) {
+        if (docValues.advanceExact(doc)) {
           value = docValues.binaryValue();
         } else {
           value = new BytesRef(BytesRef.EMPTY_BYTES);
@@ -207,10 +201,7 @@ abstract class TermsWithScoreCollector<DV> extends DocValuesTermsCollector<DV>
 
     @Override
     public void collect(int doc) throws IOException {
-      if (doc > docValues.docID()) {
-        docValues.advance(doc);
-      }
-      if (doc == docValues.docID()) {
+      if (docValues.advanceExact(doc)) {
         long ord;
         while ((ord = docValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
           int termID = collectedTerms.add(docValues.lookupOrd(ord));
@@ -255,10 +246,7 @@ abstract class TermsWithScoreCollector<DV> extends DocValuesTermsCollector<DV>
 
       @Override
       public void collect(int doc) throws IOException {
-        if (doc > docValues.docID()) {
-          docValues.advance(doc);
-        }
-        if (doc == docValues.docID()) {
+        if (docValues.advanceExact(doc)) {
           long ord;
           while ((ord = docValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
             int termID = collectedTerms.add(docValues.lookupOrd(ord));

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
----------------------------------------------------------------------
diff --git a/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java b/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
index c7f46cb..6b3ffd9 100644
--- a/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
+++ b/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java
@@ -1467,11 +1467,8 @@ public class TestJoinUtil extends LuceneTestCase {
 
           @Override
           public void collect(int doc) throws IOException {
-            if (doc > terms.docID()) {
-              terms.advance(doc);
-            }
             final BytesRef joinValue;
-            if (doc == terms.docID()) {
+            if (terms.advanceExact(doc)) {
               joinValue = terms.binaryValue();
             } else {
               // missing;
@@ -1536,11 +1533,8 @@ public class TestJoinUtil extends LuceneTestCase {
 
           @Override
           public void collect(int doc) throws IOException {
-            if (doc > terms.docID()) {
-              terms.advance(doc);
-            }
             final BytesRef joinValue;
-            if (doc == terms.docID()) {
+            if (terms.advanceExact(doc)) {
               joinValue = terms.binaryValue();
             } else {
               // missing;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java b/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
index 1c624e1..dcd1cbc 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
@@ -590,10 +590,7 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
               ord = -1;
             }
           } else {
-            if (globalDoc > docValues.docID()) {
-              docValues.advance(globalDoc);
-            }
-            if (globalDoc == docValues.docID()) {
+            if (docValues.advanceExact(globalDoc)) {
               ord = docValues.ordValue();
             } else {
               ord = -1;
@@ -663,12 +660,8 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
 
         @Override
         public void collect(int docId) throws IOException {
-          int valuesDocID = docValues.docID();
-          if (valuesDocID < docId) {
-            valuesDocID = docValues.advance(docId);
-          }
           long value;
-          if (valuesDocID == docId) {
+          if (docValues.advanceExact(docId)) {
             value = docValues.longValue();
           } else {
             value = 0;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
index 8c93b52..6b96087 100644
--- a/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/CollapsingQParserPlugin.java
@@ -554,20 +554,14 @@ public class CollapsingQParserPlugin extends QParserPlugin {
       int ord = -1;
       if(this.ordinalMap != null) {
         //Handle ordinalMapping case
-        if (contextDoc > segmentValues.docID()) {
-          segmentValues.advance(contextDoc);
-        }
-        if (contextDoc == segmentValues.docID()) {
+        if (segmentValues.advanceExact(contextDoc)) {
           ord = (int)segmentOrdinalMap.get(segmentValues.ordValue());
         } else {
           ord = -1;
         }
       } else {
         //Handle top Level FieldCache or Single Segment Case
-        if (globalDoc > segmentValues.docID()) {
-          segmentValues.advance(globalDoc);
-        }
-        if (globalDoc == segmentValues.docID()) {
+        if (segmentValues.advanceExact(globalDoc)) {
           ord = segmentValues.ordValue();
         } else {
           ord = -1;
@@ -780,14 +774,8 @@ public class CollapsingQParserPlugin extends QParserPlugin {
 
     @Override
     public void collect(int contextDoc) throws IOException {
-
-      int collapseDocID = collapseValues.docID();
-      if (collapseDocID < contextDoc) {
-        collapseDocID = collapseValues.advance(contextDoc);
-      }
-
       int collapseValue;
-      if (collapseDocID == contextDoc) {
+      if (collapseValues.advanceExact(contextDoc)) {
         collapseValue = (int) collapseValues.longValue();
       } else {
         collapseValue = 0;
@@ -1016,10 +1004,7 @@ public class CollapsingQParserPlugin extends QParserPlugin {
           ord = (int)segmentOrdinalMap.get(segmentValues.ordValue());
         }
       } else {
-        if (globalDoc > segmentValues.docID()) {
-          segmentValues.advance(globalDoc);
-        }
-        if (globalDoc == segmentValues.docID()) {
+        if (segmentValues.advanceExact(globalDoc)) {
           ord = segmentValues.ordValue();
         }
       }
@@ -1191,13 +1176,8 @@ public class CollapsingQParserPlugin extends QParserPlugin {
     }
 
     public void collect(int contextDoc) throws IOException {
-      int collapseDocID = collapseValues.docID();
-      if (collapseDocID < contextDoc) {
-        collapseDocID = collapseValues.advance(contextDoc);
-      }
-
       int collapseKey;
-      if (collapseDocID == contextDoc) {
+      if (collapseValues.advanceExact(contextDoc)) {
         collapseKey = (int) collapseValues.longValue();
       } else {
         collapseKey = 0;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java
index 053f50f..c9e1434 100644
--- a/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/IGainTermsQParserPlugin.java
@@ -125,12 +125,8 @@ public class IGainTermsQParserPlugin extends QParserPlugin {
     public void collect(int doc) throws IOException {
       super.collect(doc);
       ++count;
-      int valuesDocID = leafOutcomeValue.docID();
-      if (valuesDocID < doc) {
-        valuesDocID = leafOutcomeValue.advance(doc);
-      }
       int value;
-      if (valuesDocID == doc) {
+      if (leafOutcomeValue.advanceExact(doc)) {
         value = (int) leafOutcomeValue.longValue();
       } else {
         value = 0;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java
index 842f746..5d3bb46 100644
--- a/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/TextLogisticRegressionQParserPlugin.java
@@ -150,12 +150,8 @@ public class TextLogisticRegressionQParserPlugin extends QParserPlugin {
     }
 
     public void collect(int doc) throws IOException{
-      int valuesDocID = leafOutcomeValue.docID();
-      if (valuesDocID < doc) {
-        valuesDocID = leafOutcomeValue.advance(doc);
-      }
       int outcome;
-      if (valuesDocID == doc) {
+      if (leafOutcomeValue.advanceExact(doc)) {
         outcome = (int) leafOutcomeValue.longValue();
       } else {
         outcome = 0;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByHashDV.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByHashDV.java b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByHashDV.java
index 2383a14..7691970 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByHashDV.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByHashDV.java
@@ -386,10 +386,7 @@ class FacetFieldProcessorByHashDV extends FacetFieldProcessor {
 
           @Override
           public void collect(int segDoc) throws IOException {
-            if (segDoc > values.docID()) {
-              values.advance(segDoc);
-            }
-            if (segDoc == values.docID()) {
+            if (values.advanceExact(segDoc)) {
               long l = values.nextValue(); // This document must have at least one value
               collectValFirstPhase(segDoc, l);
               for (int i = 1; i < values.docValueCount(); i++) {
@@ -417,10 +414,7 @@ class FacetFieldProcessorByHashDV extends FacetFieldProcessor {
 
           @Override
           public void collect(int segDoc) throws IOException {
-            if (segDoc > values.docID()) {
-              values.advance(segDoc);
-            }
-            if (segDoc == values.docID()) {
+            if (values.advanceExact(segDoc)) {
               collectValFirstPhase(segDoc, values.longValue());
             }
           }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java b/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
index ac8bf0b..8d4dc4d 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
@@ -335,10 +335,7 @@ public class MinMaxAgg extends SimpleAggValueSource {
 
     @Override
     public void collect(int doc, int slotNum) throws IOException {
-      if (doc > subDv.docID()) {
-        subDv.advance(doc);
-      }
-      if (doc == subDv.docID()) {
+      if (subDv.advanceExact(doc)) {
         int segOrd = subDv.ordValue();
         int ord = toGlobal==null ? segOrd : (int)toGlobal.get(segOrd);
         if ((ord - slotOrd[slotNum]) * minmax < 0 || slotOrd[slotNum]==MISSING) {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/java/org/apache/solr/search/facet/UniqueMultiDvSlotAcc.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/facet/UniqueMultiDvSlotAcc.java b/solr/core/src/java/org/apache/solr/search/facet/UniqueMultiDvSlotAcc.java
index 02d457f..af419a4 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/UniqueMultiDvSlotAcc.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/UniqueMultiDvSlotAcc.java
@@ -71,10 +71,7 @@ class UniqueMultiDvSlotAcc extends UniqueSlotAcc {
 
   @Override
   public void collect(int doc, int slotNum) throws IOException {
-    if (doc > subDv.docID()) {
-      subDv.advance(doc);
-    }
-    if (doc == subDv.docID()) {
+    if (subDv.advanceExact(doc)) {
 
       int segOrd = (int) subDv.nextOrd();
       assert segOrd >= 0;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6ae6ce2f/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java b/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java
index 67a71ee..1494c7d 100644
--- a/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java
+++ b/solr/core/src/test/org/apache/solr/search/TestRankQueryPlugin.java
@@ -687,12 +687,8 @@ public class TestRankQueryPlugin extends QParserPlugin {
         public void setScorer(Scorer scorer) throws IOException {}
         
         public void collect(int doc) throws IOException {
-          int valuesDocID = values.docID();
-          if (valuesDocID < doc) {
-            valuesDocID = values.advance(doc);
-          }
           long value;
-          if (valuesDocID == doc) {
+          if (values.advanceExact(doc)) {
             value = values.longValue();
           } else {
             value = 0;


[2/2] lucene-solr:branch_7x: LUCENE-8127: Speed up rewriteNoScoring when there are no MUST clauses.

Posted by jp...@apache.org.
LUCENE-8127: Speed up rewriteNoScoring when there are no MUST clauses.


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

Branch: refs/heads/branch_7x
Commit: 9d66dc27328816a845d4f448bf2efa33f289207e
Parents: cda002d
Author: Adrien Grand <jp...@gmail.com>
Authored: Mon Feb 12 14:39:17 2018 +0100
Committer: Adrien Grand <jp...@gmail.com>
Committed: Mon Feb 12 17:43:14 2018 +0100

----------------------------------------------------------------------
 lucene/CHANGES.txt                                              | 3 +++
 lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java | 3 +++
 2 files changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9d66dc27/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index d667b56..6e6c9d3 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -60,6 +60,9 @@ Improvements
   classes to use the optimized variants through the MR-JAR mechanism.
   (Uwe Schindler, Robert Muir, Adrien Grand, Mike McCandless)
 
+* LUCENE-8127: Speed up rewriteNoScoring when there are no MUST clauses.
+  (Michael Braun via Adrien Grand)
+
 Bug Fixes
 
 * LUCENE-8077: Fixed bug in how CheckIndex verifies doc-value iterators.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/9d66dc27/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java b/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
index a3f5ae0..7d487cc 100644
--- a/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/BooleanQuery.java
@@ -183,6 +183,9 @@ public class BooleanQuery extends Query implements Iterable<BooleanClause> {
   }
 
   private BooleanQuery rewriteNoScoring() {
+    if (clauseSets.get(Occur.MUST).size() == 0) {
+      return this;
+    }
     BooleanQuery.Builder newQuery = new BooleanQuery.Builder();
     newQuery.setMinimumNumberShouldMatch(getMinimumNumberShouldMatch());
     for (BooleanClause clause : clauses) {