You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2023/02/06 16:49:30 UTC
[lucene] branch main updated: Remove useless abstractions in DocValues-based queries (#12127)
This is an automated email from the ASF dual-hosted git repository.
rmuir pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/main by this push:
new a6bceb7cf00 Remove useless abstractions in DocValues-based queries (#12127)
a6bceb7cf00 is described below
commit a6bceb7cf005dc2a99fc067a4f0b72508feab483
Author: Robert Muir <rm...@apache.org>
AuthorDate: Mon Feb 6 11:49:25 2023 -0500
Remove useless abstractions in DocValues-based queries (#12127)
There's no need to make things abstract: DocValues does the right thing
Optimizing for where no docs for the field in the segment exist is easy, simple null check (replacing the existing one!)
---
.../lucene/document/NumericDocValuesField.java | 27 ++-----------------
.../lucene/document/SortedDocValuesField.java | 11 +-------
.../document/SortedNumericDocValuesField.java | 31 ++--------------------
.../document/SortedNumericDocValuesRangeQuery.java | 15 +++--------
.../document/SortedNumericDocValuesSetQuery.java | 11 +++-----
.../lucene/document/SortedSetDocValuesField.java | 11 +-------
.../document/SortedSetDocValuesRangeQuery.java | 17 +++---------
7 files changed, 18 insertions(+), 105 deletions(-)
diff --git a/lucene/core/src/java/org/apache/lucene/document/NumericDocValuesField.java b/lucene/core/src/java/org/apache/lucene/document/NumericDocValuesField.java
index dc14fea8471..6c3c3825e33 100644
--- a/lucene/core/src/java/org/apache/lucene/document/NumericDocValuesField.java
+++ b/lucene/core/src/java/org/apache/lucene/document/NumericDocValuesField.java
@@ -16,12 +16,7 @@
*/
package org.apache.lucene.document;
-import java.io.IOException;
-import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.DocValuesType;
-import org.apache.lucene.index.LeafReader;
-import org.apache.lucene.index.NumericDocValues;
-import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.search.IndexOrDocValuesQuery;
import org.apache.lucene.search.Query;
@@ -90,16 +85,7 @@ public class NumericDocValuesField extends Field {
* @see DoubleField#newRangeQuery
*/
public static Query newSlowRangeQuery(String field, long lowerValue, long upperValue) {
- return new SortedNumericDocValuesRangeQuery(field, lowerValue, upperValue) {
- @Override
- SortedNumericDocValues getValues(LeafReader reader, String field) throws IOException {
- NumericDocValues values = reader.getNumericDocValues(field);
- if (values == null) {
- return null;
- }
- return DocValues.singleton(values);
- }
- };
+ return new SortedNumericDocValuesRangeQuery(field, lowerValue, upperValue);
}
/**
@@ -116,16 +102,7 @@ public class NumericDocValuesField extends Field {
* @see DoubleField#newSetQuery
*/
public static Query newSlowSetQuery(String field, long... values) {
- return new SortedNumericDocValuesSetQuery(field, values.clone()) {
- @Override
- SortedNumericDocValues getValues(LeafReader reader, String field) throws IOException {
- NumericDocValues values = reader.getNumericDocValues(field);
- if (values == null) {
- return null;
- }
- return DocValues.singleton(values);
- }
- };
+ return new SortedNumericDocValuesSetQuery(field, values.clone());
}
/**
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedDocValuesField.java b/lucene/core/src/java/org/apache/lucene/document/SortedDocValuesField.java
index ef936c38e66..bbbe1467f7e 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedDocValuesField.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedDocValuesField.java
@@ -16,11 +16,7 @@
*/
package org.apache.lucene.document;
-import java.io.IOException;
-import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.DocValuesType;
-import org.apache.lucene.index.LeafReader;
-import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.search.IndexOrDocValuesQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.util.BytesRef;
@@ -78,12 +74,7 @@ public class SortedDocValuesField extends Field {
boolean lowerInclusive,
boolean upperInclusive) {
return new SortedSetDocValuesRangeQuery(
- field, lowerValue, upperValue, lowerInclusive, upperInclusive) {
- @Override
- SortedSetDocValues getValues(LeafReader reader, String field) throws IOException {
- return DocValues.singleton(DocValues.getSorted(reader, field));
- }
- };
+ field, lowerValue, upperValue, lowerInclusive, upperInclusive);
}
/**
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesField.java b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesField.java
index 0548c3f516f..091634cfb40 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesField.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesField.java
@@ -16,12 +16,7 @@
*/
package org.apache.lucene.document;
-import java.io.IOException;
-import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.DocValuesType;
-import org.apache.lucene.index.FieldInfo;
-import org.apache.lucene.index.LeafReader;
-import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.search.IndexOrDocValuesQuery;
import org.apache.lucene.search.Query;
@@ -88,18 +83,7 @@ public class SortedNumericDocValuesField extends Field {
* @see DoubleField#newRangeQuery
*/
public static Query newSlowRangeQuery(String field, long lowerValue, long upperValue) {
- return new SortedNumericDocValuesRangeQuery(field, lowerValue, upperValue) {
- @Override
- SortedNumericDocValues getValues(LeafReader reader, String field) throws IOException {
- FieldInfo info = reader.getFieldInfos().fieldInfo(field);
- if (info == null) {
- // Queries have some optimizations when one sub scorer returns null rather
- // than a scorer that does not match any documents
- return null;
- }
- return DocValues.getSortedNumeric(reader, field);
- }
- };
+ return new SortedNumericDocValuesRangeQuery(field, lowerValue, upperValue);
}
/**
@@ -116,18 +100,7 @@ public class SortedNumericDocValuesField extends Field {
* @see DoubleField#newSetQuery
*/
public static Query newSlowSetQuery(String field, long... values) {
- return new SortedNumericDocValuesSetQuery(field, values.clone()) {
- @Override
- SortedNumericDocValues getValues(LeafReader reader, String field) throws IOException {
- FieldInfo info = reader.getFieldInfos().fieldInfo(field);
- if (info == null) {
- // Queries have some optimizations when one sub scorer returns null rather
- // than a scorer that does not match any documents
- return null;
- }
- return DocValues.getSortedNumeric(reader, field);
- }
- };
+ return new SortedNumericDocValuesSetQuery(field, values.clone());
}
/**
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 8aa01815d11..21264409136 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesRangeQuery.java
@@ -19,7 +19,6 @@ package org.apache.lucene.document;
import java.io.IOException;
import java.util.Objects;
import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.SortedNumericDocValues;
@@ -34,7 +33,7 @@ import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.TwoPhaseIterator;
import org.apache.lucene.search.Weight;
-abstract class SortedNumericDocValuesRangeQuery extends Query {
+final class SortedNumericDocValuesRangeQuery extends Query {
private final String field;
private final long lowerValue;
@@ -59,11 +58,7 @@ abstract class SortedNumericDocValuesRangeQuery extends Query {
@Override
public int hashCode() {
- int h = classHash();
- h = 31 * h + field.hashCode();
- h = 31 * h + Long.hashCode(lowerValue);
- h = 31 * h + Long.hashCode(upperValue);
- return h;
+ return Objects.hash(classHash(), field, lowerValue, upperValue);
}
@Override
@@ -95,8 +90,6 @@ abstract class SortedNumericDocValuesRangeQuery extends Query {
return super.rewrite(indexSearcher);
}
- abstract SortedNumericDocValues getValues(LeafReader reader, String field) throws IOException;
-
@Override
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost)
throws IOException {
@@ -109,10 +102,10 @@ abstract class SortedNumericDocValuesRangeQuery extends Query {
@Override
public Scorer scorer(LeafReaderContext context) throws IOException {
- SortedNumericDocValues values = getValues(context.reader(), field);
- if (values == null) {
+ if (context.reader().getFieldInfos().fieldInfo(field) == null) {
return null;
}
+ SortedNumericDocValues values = DocValues.getSortedNumeric(context.reader(), field);
final NumericDocValues singleton = DocValues.unwrapSingleton(values);
final TwoPhaseIterator iterator;
if (singleton != null) {
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java
index 574b9eaab82..530a640bb6f 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedNumericDocValuesSetQuery.java
@@ -19,7 +19,6 @@ package org.apache.lucene.document;
import java.io.IOException;
import java.util.Objects;
import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.SortedNumericDocValues;
@@ -37,7 +36,7 @@ import org.apache.lucene.util.Accountable;
import org.apache.lucene.util.RamUsageEstimator;
/** Similar to SortedNumericDocValuesRangeQuery but for a set */
-abstract class SortedNumericDocValuesSetQuery extends Query implements Accountable {
+final class SortedNumericDocValuesSetQuery extends Query implements Accountable {
private static final long BASE_RAM_BYTES =
RamUsageEstimator.shallowSizeOfInstance(SortedNumericDocValuesSetQuery.class);
@@ -60,7 +59,7 @@ abstract class SortedNumericDocValuesSetQuery extends Query implements Accountab
@Override
public int hashCode() {
- return 31 * classHash() + Objects.hash(field, numbers);
+ return Objects.hash(classHash(), field, numbers);
}
@Override
@@ -90,8 +89,6 @@ abstract class SortedNumericDocValuesSetQuery extends Query implements Accountab
return super.rewrite(indexSearcher);
}
- abstract SortedNumericDocValues getValues(LeafReader reader, String field) throws IOException;
-
@Override
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost)
throws IOException {
@@ -104,10 +101,10 @@ abstract class SortedNumericDocValuesSetQuery extends Query implements Accountab
@Override
public Scorer scorer(LeafReaderContext context) throws IOException {
- SortedNumericDocValues values = getValues(context.reader(), field);
- if (values == null) {
+ if (context.reader().getFieldInfos().fieldInfo(field) == null) {
return null;
}
+ SortedNumericDocValues values = DocValues.getSortedNumeric(context.reader(), field);
final NumericDocValues singleton = DocValues.unwrapSingleton(values);
final TwoPhaseIterator iterator;
if (singleton != null) {
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesField.java b/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesField.java
index 7e1b75ddcfc..49d69c1224f 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesField.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesField.java
@@ -16,11 +16,7 @@
*/
package org.apache.lucene.document;
-import java.io.IOException;
-import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.DocValuesType;
-import org.apache.lucene.index.LeafReader;
-import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.search.IndexOrDocValuesQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.util.BytesRef;
@@ -78,12 +74,7 @@ public class SortedSetDocValuesField extends Field {
boolean lowerInclusive,
boolean upperInclusive) {
return new SortedSetDocValuesRangeQuery(
- field, lowerValue, upperValue, lowerInclusive, upperInclusive) {
- @Override
- SortedSetDocValues getValues(LeafReader reader, String field) throws IOException {
- return DocValues.getSortedSet(reader, field);
- }
- };
+ field, lowerValue, upperValue, lowerInclusive, upperInclusive);
}
/**
diff --git a/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java b/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java
index cc9cbc45d0f..9f4d67a4d86 100644
--- a/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/document/SortedSetDocValuesRangeQuery.java
@@ -19,7 +19,6 @@ package org.apache.lucene.document;
import java.io.IOException;
import java.util.Objects;
import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.index.SortedSetDocValues;
@@ -35,7 +34,7 @@ import org.apache.lucene.search.TwoPhaseIterator;
import org.apache.lucene.search.Weight;
import org.apache.lucene.util.BytesRef;
-abstract class SortedSetDocValuesRangeQuery extends Query {
+final class SortedSetDocValuesRangeQuery extends Query {
private final String field;
private final BytesRef lowerValue;
@@ -71,13 +70,7 @@ abstract class SortedSetDocValuesRangeQuery extends Query {
@Override
public int hashCode() {
- int h = classHash();
- h = 31 * h + field.hashCode();
- h = 31 * h + Objects.hashCode(lowerValue);
- h = 31 * h + Objects.hashCode(upperValue);
- h = 31 * h + Boolean.hashCode(lowerInclusive);
- h = 31 * h + Boolean.hashCode(upperInclusive);
- return h;
+ return Objects.hash(classHash(), field, lowerValue, upperValue, lowerInclusive, upperInclusive);
}
@Override
@@ -109,18 +102,16 @@ abstract class SortedSetDocValuesRangeQuery extends Query {
return super.rewrite(indexSearcher);
}
- abstract SortedSetDocValues getValues(LeafReader reader, String field) throws IOException;
-
@Override
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost)
throws IOException {
return new ConstantScoreWeight(this, boost) {
@Override
public Scorer scorer(LeafReaderContext context) throws IOException {
- SortedSetDocValues values = getValues(context.reader(), field);
- if (values == null) {
+ if (context.reader().getFieldInfos().fieldInfo(field) == null) {
return null;
}
+ SortedSetDocValues values = DocValues.getSortedSet(context.reader(), field);
final long minOrd;
if (lowerValue == null) {