@@ -275,7 +275,7 @@ private boolean isBloomFilterField(FieldInfo info) {
275275 }
276276
277277 private void addToBloomFilter (FieldInfo info , BytesRef value ) {
278- assert info .getName ().equals (bloomFilterFieldName ): "Expected " + bloomFilterFieldName + " but got " + info ;
278+ assert info .getName ().equals (bloomFilterFieldName ) : "Expected " + bloomFilterFieldName + " but got " + info ;
279279 bloomFilterFieldInfo = info ;
280280 var termHashes = hashTerm (value , hashes );
281281 for (int hash : termHashes ) {
@@ -338,7 +338,7 @@ public long ramBytesUsed() {
338338 }
339339 }
340340
341- public static class Reader extends StoredFieldsReader {
341+ private static class Reader extends StoredFieldsReader implements BloomFilterProvider {
342342 @ Nullable
343343 private final BloomFilterFieldReader bloomFilterFieldReader ;
344344 private final StoredFieldsReader delegateReader ;
@@ -386,8 +386,8 @@ public void document(int docID, StoredFieldVisitor visitor) throws IOException {
386386 delegateReader .document (docID , visitor );
387387 }
388388
389- @ Nullable
390- BloomFilterFieldReader getBloomFilterFieldReader () {
389+ @ Override
390+ public BloomFilter getBloomFilter () throws IOException {
391391 return bloomFilterFieldReader ;
392392 }
393393 }
@@ -418,21 +418,16 @@ static BloomFilterMetadata readFrom(IndexInput in, FieldInfos fieldInfos) throws
418418 }
419419 }
420420
421- public static class BloomFilterFieldReader implements Closeable {
421+ static class BloomFilterFieldReader implements BloomFilter {
422422 private final FieldInfo fieldInfo ;
423423 private final IndexInput bloomFilterData ;
424424 private final RandomAccessInput bloomFilterIn ;
425425 private final int bloomFilterSizeInBits ;
426426 private final int [] hashes ;
427427
428428 @ Nullable
429- public static BloomFilterFieldReader open (
430- Directory directory ,
431- SegmentInfo si ,
432- FieldInfos fn ,
433- IOContext context ,
434- String segmentSuffix
435- ) throws IOException {
429+ static BloomFilterFieldReader open (Directory directory , SegmentInfo si , FieldInfos fn , IOContext context , String segmentSuffix )
430+ throws IOException {
436431 List <Closeable > toClose = new ArrayList <>();
437432 boolean success = false ;
438433 try (var metaInput = directory .openChecksumInput (bloomFilterMetadataFileName (si , segmentSuffix ))) {
@@ -486,7 +481,7 @@ public static BloomFilterFieldReader open(
486481 }
487482 }
488483
489- public BloomFilterFieldReader (
484+ BloomFilterFieldReader (
490485 FieldInfo fieldInfo ,
491486 RandomAccessInput bloomFilterIn ,
492487 int bloomFilterSizeInBits ,
@@ -551,4 +546,20 @@ private static String bloomFilterMetadataFileName(SegmentInfo segmentInfo, Strin
551546 private static String bloomFilterFileName (SegmentInfo segmentInfo , String segmentSuffix ) {
552547 return IndexFileNames .segmentFileName (segmentInfo .name , segmentSuffix , STORED_FIELDS_BLOOM_FILTER_EXTENSION );
553548 }
549+
550+ public interface BloomFilter extends Closeable {
551+ /**
552+ * Tests whether the given term may exist in the specified field.
553+ *
554+ * @param field the field name to check
555+ * @param term the term to test for membership
556+ * @return true if term may be present, false if definitely absent
557+ */
558+ boolean mayContainTerm (String field , BytesRef term ) throws IOException ;
559+ }
560+
561+ public interface BloomFilterProvider extends Closeable {
562+ @ Nullable
563+ BloomFilter getBloomFilter () throws IOException ;
564+ }
554565}
0 commit comments