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) {