You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2022/05/06 08:59:00 UTC

[lucene] branch branch_9x updated: LUCENE-10436: Reinstate public getdocValuesdocIdSetIterator method on DocValues (#869)

This is an automated email from the ASF dual-hosted git repository.

romseygeek pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/lucene.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new ad9f9685180 LUCENE-10436: Reinstate public getdocValuesdocIdSetIterator method on DocValues (#869)
ad9f9685180 is described below

commit ad9f9685180c95977bfa9b91d8fcc01576651a99
Author: Alan Woodward <ro...@apache.org>
AuthorDate: Fri May 6 09:41:28 2022 +0100

    LUCENE-10436: Reinstate public getdocValuesdocIdSetIterator method on DocValues (#869)
    
    The method moved from DocValuesFieldExistsQuery to DocValuesIterator, but the latter
    is a package-private utility class, making it invisible to client code.  This commit moves it
    back onto FieldExistsQuery, meaning that the upgrade path will be the same as for all other
    uses of DocValuesFieldExistsQuery.
---
 .../java/org/apache/lucene/index/CheckIndex.java   |  3 +-
 .../org/apache/lucene/index/DocValuesIterator.java | 36 ----------------------
 .../java/org/apache/lucene/index/IndexWriter.java  |  6 ++--
 .../apache/lucene/index/PendingSoftDeletes.java    |  3 +-
 .../index/SoftDeletesDirectoryReaderWrapper.java   |  3 +-
 .../org/apache/lucene/search/FieldExistsQuery.java | 36 ++++++++++++++++++++++
 6 files changed, 45 insertions(+), 42 deletions(-)

diff --git a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
index 07506eb260f..e6bb6413112 100644
--- a/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
+++ b/lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
@@ -56,6 +56,7 @@ import org.apache.lucene.index.CheckIndex.Status.DocValuesStatus;
 import org.apache.lucene.index.PointValues.IntersectVisitor;
 import org.apache.lucene.index.PointValues.Relation;
 import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.search.FieldExistsQuery;
 import org.apache.lucene.search.LeafFieldComparator;
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.SortField;
@@ -4145,7 +4146,7 @@ public final class CheckIndex implements Closeable {
     try {
       int softDeletes =
           PendingSoftDeletes.countSoftDeletes(
-              DocValuesIterator.getDocValuesDocIdSetIterator(softDeletesField, reader),
+              FieldExistsQuery.getDocValuesDocIdSetIterator(softDeletesField, reader),
               reader.getLiveDocs());
       if (softDeletes != info.getSoftDelCount()) {
         throw new CheckIndexException(
diff --git a/lucene/core/src/java/org/apache/lucene/index/DocValuesIterator.java b/lucene/core/src/java/org/apache/lucene/index/DocValuesIterator.java
index d60537a33f0..f08268e5841 100644
--- a/lucene/core/src/java/org/apache/lucene/index/DocValuesIterator.java
+++ b/lucene/core/src/java/org/apache/lucene/index/DocValuesIterator.java
@@ -28,40 +28,4 @@ abstract class DocValuesIterator extends DocIdSetIterator {
    * returns {@code target}.
    */
   public abstract boolean advanceExact(int target) throws IOException;
-
-  /**
-   * Returns a {@link DocIdSetIterator} from the given field or null if the field doesn't exist in
-   * the reader or if the reader has no doc values for the field.
-   */
-  public static DocIdSetIterator getDocValuesDocIdSetIterator(String field, LeafReader reader)
-      throws IOException {
-    FieldInfo fieldInfo = reader.getFieldInfos().fieldInfo(field);
-    final DocIdSetIterator iterator;
-    if (fieldInfo != null) {
-      switch (fieldInfo.getDocValuesType()) {
-        case NONE:
-          iterator = null;
-          break;
-        case NUMERIC:
-          iterator = reader.getNumericDocValues(field);
-          break;
-        case BINARY:
-          iterator = reader.getBinaryDocValues(field);
-          break;
-        case SORTED:
-          iterator = reader.getSortedDocValues(field);
-          break;
-        case SORTED_NUMERIC:
-          iterator = reader.getSortedNumericDocValues(field);
-          break;
-        case SORTED_SET:
-          iterator = reader.getSortedSetDocValues(field);
-          break;
-        default:
-          throw new AssertionError();
-      }
-      return iterator;
-    }
-    return null;
-  }
 }
diff --git a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
index 8b2e5b328d3..31c2ae15730 100644
--- a/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
+++ b/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
@@ -59,6 +59,7 @@ import org.apache.lucene.internal.tests.IndexPackageAccess;
 import org.apache.lucene.internal.tests.IndexWriterAccess;
 import org.apache.lucene.internal.tests.TestSecrets;
 import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.search.FieldExistsQuery;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.Sort;
@@ -3142,8 +3143,7 @@ public class IndexWriter
           Bits liveDocs = leaf.getLiveDocs();
           numSoftDeleted +=
               PendingSoftDeletes.countSoftDeletes(
-                  DocValuesIterator.getDocValuesDocIdSetIterator(
-                      config.getSoftDeletesField(), leaf),
+                  FieldExistsQuery.getDocValuesDocIdSetIterator(config.getSoftDeletesField(), leaf),
                   liveDocs);
         }
       }
@@ -4848,7 +4848,7 @@ public class IndexWriter
     int hardDeleteCount = 0;
     int softDeletesCount = 0;
     DocIdSetIterator softDeletedDocs =
-        DocValuesIterator.getDocValuesDocIdSetIterator(config.getSoftDeletesField(), reader);
+        FieldExistsQuery.getDocValuesDocIdSetIterator(config.getSoftDeletesField(), reader);
     if (softDeletedDocs != null) {
       int docId;
       while ((docId = softDeletedDocs.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
diff --git a/lucene/core/src/java/org/apache/lucene/index/PendingSoftDeletes.java b/lucene/core/src/java/org/apache/lucene/index/PendingSoftDeletes.java
index d9d10c3a259..a8377ad8f6d 100644
--- a/lucene/core/src/java/org/apache/lucene/index/PendingSoftDeletes.java
+++ b/lucene/core/src/java/org/apache/lucene/index/PendingSoftDeletes.java
@@ -21,6 +21,7 @@ import java.io.Closeable;
 import java.io.IOException;
 import org.apache.lucene.codecs.FieldInfosFormat;
 import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.search.FieldExistsQuery;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.util.Bits;
@@ -77,7 +78,7 @@ final class PendingSoftDeletes extends PendingDeletes {
     // only re-calculate this if we haven't seen this generation
     if (dvGeneration < info.getDocValuesGen()) {
       final DocIdSetIterator iterator =
-          DocValuesIterator.getDocValuesDocIdSetIterator(field, reader);
+          FieldExistsQuery.getDocValuesDocIdSetIterator(field, reader);
       int newDelCount;
       if (iterator
           != null) { // nothing is deleted we don't have a soft deletes field in this segment
diff --git a/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java b/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java
index 96e6bb1ba15..149b1799231 100644
--- a/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java
+++ b/lucene/core/src/java/org/apache/lucene/index/SoftDeletesDirectoryReaderWrapper.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Objects;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.search.DocIdSetIterator;
+import org.apache.lucene.search.FieldExistsQuery;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.FixedBitSet;
 
@@ -126,7 +127,7 @@ public final class SoftDeletesDirectoryReaderWrapper extends FilterDirectoryRead
   }
 
   static LeafReader wrap(LeafReader reader, String field) throws IOException {
-    DocIdSetIterator iterator = DocValuesIterator.getDocValuesDocIdSetIterator(field, reader);
+    DocIdSetIterator iterator = FieldExistsQuery.getDocValuesDocIdSetIterator(field, reader);
     if (iterator == null) {
       return reader;
     }
diff --git a/lucene/core/src/java/org/apache/lucene/search/FieldExistsQuery.java b/lucene/core/src/java/org/apache/lucene/search/FieldExistsQuery.java
index c58ceb9f3bb..fa63be63942 100644
--- a/lucene/core/src/java/org/apache/lucene/search/FieldExistsQuery.java
+++ b/lucene/core/src/java/org/apache/lucene/search/FieldExistsQuery.java
@@ -41,6 +41,42 @@ public class FieldExistsQuery extends Query {
     this.field = Objects.requireNonNull(field);
   }
 
+  /**
+   * Returns a {@link DocIdSetIterator} from the given field or null if the field doesn't exist in
+   * the reader or if the reader has no doc values for the field.
+   */
+  public static DocIdSetIterator getDocValuesDocIdSetIterator(String field, LeafReader reader)
+      throws IOException {
+    FieldInfo fieldInfo = reader.getFieldInfos().fieldInfo(field);
+    final DocIdSetIterator iterator;
+    if (fieldInfo != null) {
+      switch (fieldInfo.getDocValuesType()) {
+        case NONE:
+          iterator = null;
+          break;
+        case NUMERIC:
+          iterator = reader.getNumericDocValues(field);
+          break;
+        case BINARY:
+          iterator = reader.getBinaryDocValues(field);
+          break;
+        case SORTED:
+          iterator = reader.getSortedDocValues(field);
+          break;
+        case SORTED_NUMERIC:
+          iterator = reader.getSortedNumericDocValues(field);
+          break;
+        case SORTED_SET:
+          iterator = reader.getSortedSetDocValues(field);
+          break;
+        default:
+          throw new AssertionError();
+      }
+      return iterator;
+    }
+    return null;
+  }
+
   public String getField() {
     return field;
   }