Skip to content

Commit

Permalink
LUCENE-10436: Reinstate public getdocValuesdocIdSetIterator method on…
Browse files Browse the repository at this point in the history
… 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.
  • Loading branch information
romseygeek committed May 6, 2022
1 parent 6815ba8 commit ad9f968
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 42 deletions.
3 changes: 2 additions & 1 deletion lucene/core/src/java/org/apache/lucene/index/CheckIndex.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
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;
Expand Down Expand Up @@ -4145,7 +4146,7 @@ private static Status.SoftDeletsStatus checkSoftDeletes(
try {
int softDeletes =
PendingSoftDeletes.countSoftDeletes(
DocValuesIterator.getDocValuesDocIdSetIterator(softDeletesField, reader),
FieldExistsQuery.getDocValuesDocIdSetIterator(softDeletesField, reader),
reader.getLiveDocs());
if (softDeletes != info.getSoftDelCount()) {
throw new CheckIndexException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
6 changes: 3 additions & 3 deletions lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
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;
Expand Down Expand Up @@ -3142,8 +3143,7 @@ public long addIndexes(CodecReader... readers) throws IOException {
Bits liveDocs = leaf.getLiveDocs();
numSoftDeleted +=
PendingSoftDeletes.countSoftDeletes(
DocValuesIterator.getDocValuesDocIdSetIterator(
config.getSoftDeletesField(), leaf),
FieldExistsQuery.getDocValuesDocIdSetIterator(config.getSoftDeletesField(), leaf),
liveDocs);
}
}
Expand Down Expand Up @@ -4848,7 +4848,7 @@ private void countSoftDeletes(
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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
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;
Expand Down Expand Up @@ -77,7 +78,7 @@ void onNewReader(CodecReader reader, SegmentCommitInfo info) throws IOException
// 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
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;

Expand Down Expand Up @@ -126,7 +127,7 @@ public LeafReader wrap(LeafReader reader) {
}

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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,42 @@ public FieldExistsQuery(String field) {
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;
}
Expand Down

0 comments on commit ad9f968

Please sign in to comment.