diff --git a/lucene/core/src/java/org/apache/lucene/util/BitDocIdSet.java b/lucene/core/src/java/org/apache/lucene/util/BitDocIdSet.java
index 0502b70f6afd..0bab9ad7eb13 100644
--- a/lucene/core/src/java/org/apache/lucene/util/BitDocIdSet.java
+++ b/lucene/core/src/java/org/apache/lucene/util/BitDocIdSet.java
@@ -16,7 +16,6 @@
*/
package org.apache.lucene.util;
-import java.io.IOException;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
@@ -58,22 +57,6 @@ public DocIdSetIterator iterator() {
return new BitSetIterator(set, cost);
}
- /**
- * Provides a {@link Bits} interface for random access to matching documents.
- *
- * @return {@code null}, if this {@code DocIdSet} does not support random access. In contrast to
- * {@link #iterator()}, a return value of {@code null} does not imply that no documents
- * match the filter! The default implementation does not provide random access, so you only
- * need to implement this method if your DocIdSet can guarantee random access to every docid
- * in O(1) time without external disk access (as {@link Bits} interface cannot throw {@link
- * IOException}). This is generally true for bit sets like {@link
- * org.apache.lucene.util.FixedBitSet}, which return itself if they are used as {@code
- * DocIdSet}.
- */
- public BitSet bits() {
- return set;
- }
-
@Override
public long ramBytesUsed() {
return BASE_RAM_BYTES_USED + set.ramBytesUsed();
diff --git a/lucene/core/src/test/org/apache/lucene/util/TestFixedBitDocIdSet.java b/lucene/core/src/test/org/apache/lucene/util/TestFixedBitDocIdSet.java
index 422d209d1647..dd31f41d76ac 100644
--- a/lucene/core/src/test/org/apache/lucene/util/TestFixedBitDocIdSet.java
+++ b/lucene/core/src/test/org/apache/lucene/util/TestFixedBitDocIdSet.java
@@ -16,9 +16,7 @@
*/
package org.apache.lucene.util;
-import java.io.IOException;
import java.util.BitSet;
-import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.tests.util.BaseDocIdSetTestCase;
public class TestFixedBitDocIdSet extends BaseDocIdSetTestCase {
@@ -31,25 +29,4 @@ public BitDocIdSet copyOf(BitSet bs, int length) {
}
return new BitDocIdSet(set);
}
-
- @Override
- public void assertEquals(int numBits, BitSet ds1, BitDocIdSet ds2) throws IOException {
- super.assertEquals(numBits, ds1, ds2);
- // bits()
- final Bits bits = ds2.bits();
- if (bits != null) {
- // test consistency between bits and iterator
- DocIdSetIterator it2 = ds2.iterator();
- for (int previousDoc = -1, doc = it2.nextDoc(); ; previousDoc = doc, doc = it2.nextDoc()) {
- final int max = doc == DocIdSetIterator.NO_MORE_DOCS ? bits.length() : doc;
- for (int i = previousDoc + 1; i < max; ++i) {
- assertFalse(bits.get(i));
- }
- if (doc == DocIdSetIterator.NO_MORE_DOCS) {
- break;
- }
- assertTrue(bits.get(doc));
- }
- }
- }
}
diff --git a/lucene/core/src/test/org/apache/lucene/util/TestSparseFixedBitDocIdSet.java b/lucene/core/src/test/org/apache/lucene/util/TestSparseFixedBitDocIdSet.java
index e79a3b8e72bc..42489c31cd60 100644
--- a/lucene/core/src/test/org/apache/lucene/util/TestSparseFixedBitDocIdSet.java
+++ b/lucene/core/src/test/org/apache/lucene/util/TestSparseFixedBitDocIdSet.java
@@ -16,7 +16,6 @@
*/
package org.apache.lucene.util;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.Collections;
@@ -47,13 +46,4 @@ public BitDocIdSet copyOf(BitSet bs, int length) {
}
return new BitDocIdSet(set, set.approximateCardinality());
}
-
- @Override
- public void assertEquals(int numBits, BitSet ds1, BitDocIdSet ds2) throws IOException {
- for (int i = 0; i < numBits; ++i) {
- assertEquals(ds1.get(i), ds2.bits().get(i));
- }
- assertEquals(ds1.cardinality(), ds2.bits().cardinality());
- super.assertEquals(numBits, ds1, ds2);
- }
}
diff --git a/lucene/join/src/java/org/apache/lucene/search/join/QueryBitSetProducer.java b/lucene/join/src/java/org/apache/lucene/search/join/QueryBitSetProducer.java
index 5539320123cf..ac866fe013d0 100644
--- a/lucene/join/src/java/org/apache/lucene/search/join/QueryBitSetProducer.java
+++ b/lucene/join/src/java/org/apache/lucene/search/join/QueryBitSetProducer.java
@@ -25,19 +25,17 @@
import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.ReaderUtil;
-import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.Weight;
-import org.apache.lucene.util.BitDocIdSet;
import org.apache.lucene.util.BitSet;
+import org.apache.lucene.util.FixedBitSet;
/** A {@link BitSetProducer} that wraps a query and caches matching {@link BitSet}s per segment. */
public class QueryBitSetProducer implements BitSetProducer {
private final Query query;
- final Map cache =
- Collections.synchronizedMap(new WeakHashMap<>());
+ final Map cache = Collections.synchronizedMap(new WeakHashMap<>());
/**
* Wraps another query's result and caches it into bitsets.
@@ -57,16 +55,18 @@ public Query getQuery() {
return query;
}
+ private static final BitSet SENTINEL = new FixedBitSet(0);
+
@Override
public BitSet getBitSet(LeafReaderContext context) throws IOException {
final LeafReader reader = context.reader();
final IndexReader.CacheHelper cacheHelper = reader.getCoreCacheHelper();
- DocIdSet docIdSet = null;
+ BitSet bitSet = null;
if (cacheHelper != null) {
- docIdSet = cache.get(cacheHelper.getKey());
+ bitSet = cache.get(cacheHelper.getKey());
}
- if (docIdSet == null) {
+ if (bitSet == null) {
final IndexReaderContext topLevelContext = ReaderUtil.getTopLevelContext(context);
final IndexSearcher searcher = new IndexSearcher(topLevelContext);
searcher.setQueryCache(null);
@@ -77,15 +77,15 @@ public BitSet getBitSet(LeafReaderContext context) throws IOException {
final Scorer s = weight.scorer(context);
if (s == null) {
- docIdSet = DocIdSet.EMPTY;
+ bitSet = SENTINEL;
} else {
- docIdSet = new BitDocIdSet(BitSet.of(s.iterator(), context.reader().maxDoc()));
+ bitSet = BitSet.of(s.iterator(), context.reader().maxDoc());
}
if (cacheHelper != null) {
- cache.put(cacheHelper.getKey(), docIdSet);
+ cache.put(cacheHelper.getKey(), bitSet);
}
}
- return docIdSet == DocIdSet.EMPTY ? null : ((BitDocIdSet) docIdSet).bits();
+ return bitSet == SENTINEL ? null : bitSet;
}
@Override