# Package org.apache.lucene.codecs

package org.apache.lucene.codecs
Codecs API: API for customization of the encoding and structure of the index.

The Codec API allows you to customise the way the following pieces of index information are stored:

- Postings lists - see `PostingsFormat`
- DocValues - see `DocValuesFormat`
- Stored fields - see `StoredFieldsFormat`
- Term vectors - see `TermVectorsFormat`
- Points - see `PointsFormat`
- FieldInfos - see `FieldInfosFormat`
- SegmentInfo - see `SegmentInfoFormat`
- Norms - see `NormsFormat`
- Live documents - see `LiveDocsFormat`
- Numeric vectors - see `KnnVectorsFormat`

For some concrete implementations beyond Lucene's official index format, see the Codecs module.

Codecs are identified by name through the Java Service Provider Interface. To create your own codec, extend `Codec` and pass the new codec's name to the super() constructor:

     public class MyCodec extends Codec {

         public MyCodec() {
             super("MyCodecName");
         }

         ...
     }

You will need to register the Codec class so that the `ServiceLoader` can find it, by including a META-INF/services/org.apache.lucene.codecs.Codec file on your classpath that contains the package-qualified name of your codec.

If you just want to customise the `PostingsFormat`, or use different postings formats for different fields, then you can register your custom postings format in the same way (in META-INF/services/org.apache.lucene.codecs.PostingsFormat), and then extend the default codec and override `org.apache.lucene.codecs.luceneMN.LuceneMNCodec#getPostingsFormatForField(String)` to return your custom postings format.

Similarly, if you just want to customise the `DocValuesFormat` per-field, have a look at `LuceneMNCodec.getDocValuesFormatForField(String)`.

- Related Packages
  Package
  Description
  org.apache.lucene.codecs.compressing
  Compressing helper classes.
  org.apache.lucene.codecs.hnsw
  HNSW vector helper classes.
  org.apache.lucene.codecs.lucene102
  Lucene 10.2 file format.
  org.apache.lucene.codecs.lucene103
  Lucene 10.3 file format.
  org.apache.lucene.codecs.lucene90
  Lucene 9.0 file format.
  org.apache.lucene.codecs.lucene94
  Lucene 9.4 file format.
  org.apache.lucene.codecs.lucene95
  Lucene 9.5 file format.
  org.apache.lucene.codecs.lucene99
  Lucene 9.9 file format.
  org.apache.lucene.codecs.perfield
  Postings format that can delegate to different formats per-field.
- Class
  Description
  BlockTermState
  Holds all state required for `PostingsReaderBase` to produce a `PostingsEnum` without re-seeking the terms dict.
  BufferingKnnVectorsWriter
  Buffers up pending vector value(s) per doc, then flushes when segment flushes.
  Codec
  Encodes/decodes an inverted index segment.
  CodecUtil
  Utility class for reading and writing versioned headers.
  CompetitiveImpactAccumulator
  This class accumulates the (freq, norm) pairs that may produce competitive scores.
  CompoundDirectory
  A read-only `Directory` that consists of a view over a compound file.
  CompoundFormat
  Encodes/decodes compound files
  DocValuesConsumer
  Abstract API that consumes numeric, binary and sorted docvalues.
  DocValuesFormat
  Encodes/decodes per-document values.
  DocValuesProducer
  Abstract API that produces numeric, binary, sorted, sortedset, and sortednumeric docvalues.
  FieldInfosFormat
  Encodes/decodes `FieldInfos`
  FieldsConsumer
  Abstract API that consumes terms, doc, freq, prox, offset and payloads postings.
  FieldsProducer
  Abstract API that produces terms, doc, freq, prox, offset and payloads postings.
  FilterCodec
  A codec that forwards all its method calls to another codec.
  KnnFieldVectorsWriter<T>
  Vectors writer for a field.
  KnnVectorsFormat
  Encodes/decodes per-document vector and any associated indexing structures required to support nearest-neighbor search
  KnnVectorsReader
  Reads vectors from an index.
  KnnVectorsWriter
  Writes vectors to an index.
  KnnVectorsWriter.MergedVectorValues
  View over multiple vector values supporting iterator-style access via DocIdMerger.
  LiveDocsFormat
  Format for live/deleted documents
  MultiLevelSkipListReader
  This abstract class reads skip lists with multiple levels.
  MultiLevelSkipListWriter
  This abstract class writes skip lists with multiple levels.
  MutablePointTree
  One leaf `PointValues.PointTree` whose order of points can be changed.
  NormsConsumer
  Abstract API that consumes normalization values.
  NormsFormat
  Encodes/decodes per-document score normalization values.
  NormsProducer
  Abstract API that produces field normalization values
  PointsFormat
  Encodes/decodes indexed points.
  PointsReader
  Abstract API to visit point values.
  PointsWriter
  Abstract API to write points
  PostingsFormat
  Encodes/decodes terms, postings, and proximity data.
  PostingsReaderBase
  The core terms dictionaries (BlockTermsReader, BlockTreeTermsReader) interact with a single instance of this class to manage creation of `PostingsEnum` and `ImpactsEnum` instances.
  PostingsWriterBase
  Class that plugs into term dictionaries, such as `Lucene103BlockTreeTermsWriter`, and handles writing postings.
  PushPostingsWriterBase
  Extension of `PostingsWriterBase`, adding a push API for writing each element of the postings.
  SegmentInfoFormat
  Expert: Controls the format of the `SegmentInfo` (segment metadata file).
  StoredFieldsFormat
  Controls the format of stored fields
  StoredFieldsReader
  Codec API for reading stored fields.
  StoredFieldsWriter
  Codec API for writing stored fields: For every document, `StoredFieldsWriter.startDocument()` is called, informing the Codec that a new document has started.
  TermStats
  Holder for per-term statistics.
  TermVectorsFormat
  Controls the format of term vectors
  TermVectorsReader
  Codec API for reading term vectors:
  TermVectorsWriter
  Codec API for writing term vectors: For every document, `TermVectorsWriter.startDocument(int)` is called, informing the Codec how many fields will be written.