org.apache.lucene.index

## Class MultiFields

- java.lang.Object
- - org.apache.lucene.index.Fields
  - - org.apache.lucene.index.MultiFields

- All Implemented Interfaces:
    Iterable<String>

      public final class MultiFields
      extends Fields

  Exposes flex API, merged from flex API of sub-segments. This is useful when you're interacting with an `IndexReader` implementation that consists of sequential sub-readers (eg `DirectoryReader` or `MultiReader`).

  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-AtomicReader, instead of using this class.

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

- - ### Field Summary

    - ### Fields inherited from class org.apache.lucene.index.Fields

      `EMPTY_ARRAY`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MultiFields(Fields[] subs, ReaderSlice[] subSlices)` Expert: construct a new MultiFields instance directly.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static Fields` | `getFields(IndexReader reader)` Returns a single `Fields` instance for this reader, merging fields/terms/docs/positions on the fly.
    `static Collection<String>` | `getIndexedFields(IndexReader reader)` Call this to get the (merged) FieldInfos representing the set of indexed fields only for a composite reader.
    `static Bits` | `getLiveDocs(IndexReader reader)` Returns a single `Bits` instance for this reader, merging live Documents on the fly.
    `static FieldInfos` | `getMergedFieldInfos(IndexReader reader)` Call this to get the (merged) FieldInfos for a composite reader.
    `static DocsEnum` | `getTermDocsEnum(IndexReader r, Bits liveDocs, String field, BytesRef term)` Returns `DocsEnum` for the specified field & term.
    `static DocsEnum` | `getTermDocsEnum(IndexReader r, Bits liveDocs, String field, BytesRef term, int flags)` Returns `DocsEnum` for the specified field & term, with control over whether freqs are required.
    `static DocsAndPositionsEnum` | `getTermPositionsEnum(IndexReader r, Bits liveDocs, String field, BytesRef term)` Returns `DocsAndPositionsEnum` for the specified field & term.
    `static DocsAndPositionsEnum` | `getTermPositionsEnum(IndexReader r, Bits liveDocs, String field, BytesRef term, int flags)` Returns `DocsAndPositionsEnum` for the specified field & term, with control over whether offsets and payloads are required.
    `static Terms` | `getTerms(IndexReader r, String field)` This method may return null if the field does not exist.
    `Iterator<String>` | `iterator()` Returns an iterator that will step through all fields names.
    `int` | `size()` Returns the number of fields or -1 if the number of distinct field names is unknown.
    `Terms` | `terms(String field)` Get the `Terms` for this field.
    `static long` | `totalTermFreq(IndexReader r, String field, BytesRef text)` Returns the total number of occurrences of this term across all documents (the sum of the freq() for each doc that has this term).

    - ### Methods inherited from class org.apache.lucene.index.Fields

      `getUniqueTermCount`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 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.

    - #### getTerms

          public static Terms getTerms(IndexReader r,
                       String field)
                                throws IOException

      This method may return null if the field does not exist.
      Throws:
        `IOException`

    - #### getTermDocsEnum

          public static DocsEnum getTermDocsEnum(IndexReader r,
                                 Bits liveDocs,
                                 String field,
                                 BytesRef term)
                                          throws IOException

      Returns `DocsEnum` for the specified field & term. This will return null if the field or term does not exist.
      Throws:
        `IOException`

    - #### getTermDocsEnum

          public static DocsEnum getTermDocsEnum(IndexReader r,
                                 Bits liveDocs,
                                 String field,
                                 BytesRef term,
                                 int flags)
                                          throws IOException

      Returns `DocsEnum` for the specified field & term, with control over whether freqs are required. Some codecs may be able to optimize their implementation when freqs are not required. This will return null if the field or term does not exist. See `TermsEnum.docs(Bits,DocsEnum,int)`.
      Throws:
        `IOException`

    - #### getTermPositionsEnum

          public static DocsAndPositionsEnum getTermPositionsEnum(IndexReader r,
                                                  Bits liveDocs,
                                                  String field,
                                                  BytesRef term)
                                                           throws IOException

      Returns `DocsAndPositionsEnum` for the specified field & term. This will return null if the field or term does not exist or positions were not indexed.
      Throws:
        `IOException`
      See Also:
        `getTermPositionsEnum(IndexReader, Bits, String, BytesRef, int)`

    - #### getTermPositionsEnum

          public static DocsAndPositionsEnum getTermPositionsEnum(IndexReader r,
                                                  Bits liveDocs,
                                                  String field,
                                                  BytesRef term,
                                                  int flags)
                                                           throws IOException

      Returns `DocsAndPositionsEnum` for the specified field & term, with control over whether offsets and payloads are required. Some codecs may be able to optimize their implementation when offsets and/or payloads are not required. This will return null if the field or term does not exist or positions were not indexed. See `TermsEnum.docsAndPositions(Bits,DocsAndPositionsEnum,int)`.
      Throws:
        `IOException`

    - #### iterator

          public Iterator<String> iterator()

      Description copied from class: `Fields`
      Returns an iterator that will step through all fields names. This will not return null.
      Specified by:
        `iterator` in interface `Iterable<String>`
      Specified by:
        `iterator` in class `Fields`

    - #### terms

          public Terms terms(String field)
                      throws IOException

      Description copied from class: `Fields`
      Get the `Terms` for this field. This will return null if the field does not exist.
      Specified by:
        `terms` in class `Fields`
      Throws:
        `IOException`

    - #### 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`

    - #### totalTermFreq

          public static long totalTermFreq(IndexReader r,
                           String field,
                           BytesRef text)
                                    throws IOException

      Returns the total number of occurrences of this term across all documents (the sum of the freq() for each doc that has this term). This will be -1 if the codec doesn't support this measure. Note that, like other term measures, this measure does not take deleted documents into account.
      Throws:
        `IOException`
      See Also:
        `TermsEnum.totalTermFreq()`

    - #### 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.

Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.