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