Class SlowCompositeReaderWrapper

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public final class SlowCompositeReaderWrapper
    extends AtomicReader
    This class forces a composite reader (eg a MultiReader or DirectoryReader) to emulate an atomic reader. This requires implementing the postings APIs on-the-fly, using the static methods in MultiFields, MultiDocValues, by stepping through the sub-readers to merge fields/terms, appending docs, etc.

    NOTE: this class almost always results in a performance hit. If this is important to your use case, you'll get better performance by gathering the sub readers using IndexReader.getContext() to get the atomic leaves and then operate per-AtomicReader, instead of using this class.

    • Method Detail

      • wrap

        public static AtomicReader wrap​(IndexReader reader)
                                 throws java.io.IOException
        This method is sugar for getting an AtomicReader from an IndexReader of any kind. If the reader is already atomic, it is returned unchanged, otherwise wrapped by this class.
        Throws:
        java.io.IOException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • fields

        public Fields fields()
        Description copied from class: AtomicReader
        Returns Fields for this reader. This method may return null if the reader has no postings.
        Specified by:
        fields in class AtomicReader
      • getDocsWithField

        public Bits getDocsWithField​(java.lang.String field)
                              throws java.io.IOException
        Description copied from class: AtomicReader
        Returns a Bits at the size of reader.maxDoc(), with turned on bits for each docid that does have a value for this field, or null if no DocValues were indexed for this field. The returned instance should only be used by a single thread
        Specified by:
        getDocsWithField in class AtomicReader
        Throws:
        java.io.IOException
      • getTermVectors

        public Fields getTermVectors​(int docID)
                              throws java.io.IOException
        Description copied from class: IndexReader
        Retrieve term vectors for this document, or null if term vectors were not indexed. The returned Fields instance acts like a single-document inverted index (the docID will be 0).
        Specified by:
        getTermVectors in class IndexReader
        Throws:
        java.io.IOException
      • numDocs

        public int numDocs()
        Description copied from class: IndexReader
        Returns the number of documents in this index.
        Specified by:
        numDocs in class IndexReader
      • maxDoc

        public int maxDoc()
        Description copied from class: IndexReader
        Returns one greater than the largest possible document number. This may be used to, e.g., determine how big to allocate an array which will have an element for every document number in an index.
        Specified by:
        maxDoc in class IndexReader
      • getLiveDocs

        public Bits getLiveDocs()
        Description copied from class: AtomicReader
        Returns the Bits representing live (not deleted) docs. A set bit indicates the doc ID has not been deleted. If this method returns null it means there are no deleted documents (all documents are live). The returned instance has been safely published for use by multiple threads without additional synchronization.
        Specified by:
        getLiveDocs in class AtomicReader
      • getCoreCacheKey

        public java.lang.Object getCoreCacheKey()
        Description copied from class: IndexReader
        Expert: Returns a key for this IndexReader, so FieldCache/CachingWrapperFilter can find it again. This key must not have equals()/hashCode() methods, so "equals" means "identical".
        Overrides:
        getCoreCacheKey in class IndexReader
      • getCombinedCoreAndDeletesKey

        public java.lang.Object getCombinedCoreAndDeletesKey()
        Description copied from class: IndexReader
        Expert: Returns a key for this IndexReader that also includes deletions, so FieldCache/CachingWrapperFilter can find it again. This key must not have equals()/hashCode() methods, so "equals" means "identical".
        Overrides:
        getCombinedCoreAndDeletesKey in class IndexReader