Package org.apache.lucene.codecs.perfield

## Class PerFieldPostingsFormat

- java.lang.Object
- - org.apache.lucene.codecs.PostingsFormat
  - - org.apache.lucene.codecs.perfield.PerFieldPostingsFormat

- All Implemented Interfaces:
    `NamedSPILoader.NamedSPI`

      public abstract class PerFieldPostingsFormat
      extends PostingsFormat

  Enables per field postings support.

  Note, when extending this class, the name (`PostingsFormat.getName()`) is written into the index. In order for the field to be read, the name must resolve to your implementation via `PostingsFormat.forName(String)`. This method uses Java's `Service Provider Interface` to resolve format names.

  Files written by each posting format have an additional suffix containing the format name. For example, in a per-field configuration instead of `_1.prx` filenames would look like `_1_Lucene40_0.prx`.

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

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static String` | `PER_FIELD_FORMAT_KEY` | `FieldInfo` attribute name used to store the format name for each field.
    `static String` | `PER_FIELD_NAME` | Name of this `PostingsFormat`.
    `static String` | `PER_FIELD_SUFFIX_KEY` | `FieldInfo` attribute name used to store the segment suffix name for each field.

    - ### Fields inherited from class org.apache.lucene.codecs.PostingsFormat

      `EMPTY`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `PerFieldPostingsFormat()` | Sole constructor.

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `FieldsConsumer` | `fieldsConsumer​(SegmentWriteState state)` | Writes a new segment
    `FieldsProducer` | `fieldsProducer​(SegmentReadState state)` | Reads a segment.
    `abstract PostingsFormat` | `getPostingsFormatForField​(String field)` | Returns the postings format that should be used for writing new segments of `field`.

    - ### Methods inherited from class org.apache.lucene.codecs.PostingsFormat

      `availablePostingsFormats, forName, getName, reloadPostingsFormats, toString`

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

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

- - ### Field Detail

    - #### PER_FIELD_NAME

          public static final String PER_FIELD_NAME

      Name of this `PostingsFormat`.
      See Also:
        Constant Field Values

    - #### PER_FIELD_FORMAT_KEY

          public static final String PER_FIELD_FORMAT_KEY

      `FieldInfo` attribute name used to store the format name for each field.

    - #### PER_FIELD_SUFFIX_KEY

          public static final String PER_FIELD_SUFFIX_KEY

      `FieldInfo` attribute name used to store the segment suffix name for each field.

  - ### Constructor Detail

    - #### PerFieldPostingsFormat

          protected PerFieldPostingsFormat()

      Sole constructor.

  - ### Method Detail

    - #### fieldsConsumer

          public final FieldsConsumer fieldsConsumer​(SegmentWriteState state)
                                              throws IOException

      Description copied from class: `PostingsFormat`
      Writes a new segment
      Specified by:
        `fieldsConsumer` in class `PostingsFormat`
      Throws:
        `IOException`

    - #### fieldsProducer

          public final FieldsProducer fieldsProducer​(SegmentReadState state)
                                              throws IOException

      Description copied from class: `PostingsFormat`
      Reads a segment. NOTE: by the time this call returns, it must hold open any files it will need to use; else, those files may be deleted. Additionally, required files may be deleted during the execution of this call before there is a chance to open them. Under these circumstances an IOException should be thrown by the implementation. IOExceptions are expected and will automatically cause a retry of the segment opening logic with the newly revised segments.
      Specified by:
        `fieldsProducer` in class `PostingsFormat`
      Throws:
        `IOException`

    - #### getPostingsFormatForField

          public abstract PostingsFormat getPostingsFormatForField​(String field)

      Returns the postings format that should be used for writing new segments of `field`.

      The field to format mapping is written to the index, so this method is only invoked when writing, not when reading.