Class MultiFields

  • All Implemented Interfaces:
    Iterable<String>

    public final class MultiFields
    extends Fields
    Provides a single Fields term index view over an IndexReader. This is useful when you're interacting with an IndexReader implementation that consists of sequential sub-readers (eg DirectoryReader or MultiReader) and you must treat it as a LeafReader.

    NOTE: for composite readers, you'll get better performance by gathering the sub readers using IndexReader.getContext() to get the atomic leaves and then operate per-LeafReader, instead of using this class.

    WARNING: This API is experimental and might change in incompatible ways in the next release.
    • Constructor Detail

      • MultiFields

        public MultiFields​(Fields[] subs,
                           ReaderSlice[] subSlices)
        Expert: construct a new MultiFields instance directly.
        NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
    • Method Detail

      • getFields

        public static Fields getFields​(IndexReader reader)
                                throws IOException
        Returns a single Fields instance for this reader, merging fields/terms/docs/positions on the fly. This method will return null if the reader has no postings.

        NOTE: this is a slow way to access postings. It's better to get the sub-readers and iterate through them yourself.

        Throws:
        IOException
      • getLiveDocs

        public static Bits getLiveDocs​(IndexReader reader)
        Returns a single Bits instance for this reader, merging live Documents on the fly. This method will return null if the reader has no deletions.

        NOTE: this is a very slow way to access live docs. For example, each Bits access will require a binary search. It's better to get the sub-readers and iterate through them yourself.

      • size

        public int size()
        Description copied from class: Fields
        Returns the number of fields or -1 if the number of distinct field names is unknown. If >= 0, Fields.iterator() will return as many field names.
        Specified by:
        size in class Fields
      • getMergedFieldInfos

        public static FieldInfos getMergedFieldInfos​(IndexReader reader)
        Call this to get the (merged) FieldInfos for a composite reader.

        NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata (FieldInfo.getAttribute(String) will be unavailable.

      • getIndexedFields

        public static Collection<String> getIndexedFields​(IndexReader reader)
        Call this to get the (merged) FieldInfos representing the set of indexed fields only for a composite reader.

        NOTE: the returned field numbers will likely not correspond to the actual field numbers in the underlying readers, and codec metadata (FieldInfo.getAttribute(String) will be unavailable.