Package org.apache.lucene.codecs.perfield

## Class PerFieldKnnVectorsFormat

- java.lang.Object
- - org.apache.lucene.codecs.KnnVectorsFormat
  - - org.apache.lucene.codecs.perfield.PerFieldKnnVectorsFormat

- All Implemented Interfaces:
    `NamedSPILoader.NamedSPI`

      public abstract class PerFieldKnnVectorsFormat
      extends KnnVectorsFormat

  Enables per field numeric vector support.

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

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

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

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `PerFieldKnnVectorsFormat.FieldsReader` | VectorReader that can wrap multiple delegate readers, selected by field.

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

      `DEFAULT_MAX_DIMENSIONS, EMPTY`

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `KnnVectorsReader` | `fieldsReader​(SegmentReadState state)` | Returns a `KnnVectorsReader` to read the vectors from the index.
    `KnnVectorsWriter` | `fieldsWriter​(SegmentWriteState state)` | Returns a `KnnVectorsWriter` to write the vectors to the index.
    `abstract KnnVectorsFormat` | `getKnnVectorsFormatForField​(String field)` | Returns the numeric vector format that should be used for writing new segments of `field` .
    `int` | `getMaxDimensions​(String fieldName)` | Returns the maximum number of vector dimensions supported by this codec for the given field name

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

      `forName, getName`

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

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

- - ### Field Detail

    - #### PER_FIELD_NAME

          public static final String PER_FIELD_NAME

      Name of this `KnnVectorsFormat`.
      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

    - #### PerFieldKnnVectorsFormat

          protected PerFieldKnnVectorsFormat()

      Sole constructor.

  - ### Method Detail

    - #### fieldsWriter

          public KnnVectorsWriter fieldsWriter​(SegmentWriteState state)
                                        throws IOException

      Description copied from class: `KnnVectorsFormat`
      Returns a `KnnVectorsWriter` to write the vectors to the index.
      Specified by:
        `fieldsWriter` in class `KnnVectorsFormat`
      Throws:
        `IOException`

    - #### fieldsReader

          public KnnVectorsReader fieldsReader​(SegmentReadState state)
                                        throws IOException

      Description copied from class: `KnnVectorsFormat`
      Returns a `KnnVectorsReader` to read the vectors from the index.
      Specified by:
        `fieldsReader` in class `KnnVectorsFormat`
      Throws:
        `IOException`

    - #### getMaxDimensions

          public int getMaxDimensions​(String fieldName)

      Description copied from class: `KnnVectorsFormat`
      Returns the maximum number of vector dimensions supported by this codec for the given field name

      Codecs should override this method to specify the maximum number of dimensions they support.

      Overrides:
        `getMaxDimensions` in class `KnnVectorsFormat`
      Parameters:
        `fieldName` - the field name
      Returns:
        the maximum number of vector dimensions.

    - #### getKnnVectorsFormatForField

          public abstract KnnVectorsFormat getKnnVectorsFormatForField​(String field)

      Returns the numeric vector 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.