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
`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
Constructor and Description
`PerFieldPostingsFormat()` Sole constructor.

### Method Summary

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

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