Class Lucene104ScalarQuantizedVectorsFormat
java.lang.Object
org.apache.lucene.codecs.KnnVectorsFormat
org.apache.lucene.codecs.hnsw.FlatVectorsFormat
org.apache.lucene.codecs.lucene104.Lucene104ScalarQuantizedVectorsFormat
- All Implemented Interfaces:
NamedSPILoader.NamedSPI
The quantization format used here is a per-vector optimized scalar quantization. These ideas are
evolutions of LVQ proposed in Similarity search in the
blink of an eye with compressed indices by Cecilia Aguerrebere et al., the previous work on
globally optimized scalar quantization in Apache Lucene, and Accelerating Large-Scale Inference with Anisotropic
Vector Quantization by Ruiqi Guo et. al. Also see
OptimizedScalarQuantizer. Some of key features are:
- Estimating the distance between two vectors using their centroid centered distance. This requires some additional corrective factors, but allows for centroid centering to occur.
- Optimized scalar quantization to single bit level of centroid centered vectors.
- Asymmetric quantization of vectors, where query vectors are quantized to half-byte (4 bits) precision (normalized to the centroid) and then compared directly against the single bit quantized vectors in the index.
- Transforming the half-byte quantized query vectors in such a way that the comparison with single bit vectors can be done with bit arithmetic.
The format is stored within two files:
.veq (vector data) file
Stores the quantized vectors in a flat format. Additionally, it stores each vector's corrective factors. At the end of the file, additional information is stored for vector ordinal to centroid ordinal mapping and sparse vector information.
- For each vector:
- [byte] the quantized values. Each dimension may be up to 8 bits, and multiple dimensions may be packed into a single byte.
- [float] the optimized quantiles and an additional similarity dependent corrective factor.
- [int] the sum of the quantized components
- After the vectors, sparse vector information keeping track of monotonic blocks.
.vemq (vector metadata) file
Stores the metadata for the vectors. This includes the number of vectors, the number of dimensions, and file offset information.
- int the field number
- int the vector encoding ordinal
- int the vector similarity ordinal
- vint the vector dimensions
- vlong the offset to the vector data in the .veq file
- vlong the length of the vector data in the .veq file
- vint the number of vectors
- vint the wire number for ScalarEncoding
- [float] the centroid
- float the centroid square magnitude
- The sparse vector information, if required, mapping vector ordinal to doc ID
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumAllowed encodings for scalar quantization. -
Field Summary
FieldsFields inherited from class org.apache.lucene.codecs.KnnVectorsFormat
DEFAULT_MAX_DIMENSIONS, EMPTY -
Constructor Summary
ConstructorsConstructorDescriptionCreates a new instance with UNSIGNED_BYTE encoding.Lucene104ScalarQuantizedVectorsFormat(Lucene104ScalarQuantizedVectorsFormat.ScalarEncoding encoding) Creates a new instance with the chosen quantization encoding. -
Method Summary
Modifier and TypeMethodDescriptionfieldsReader(SegmentReadState state) Returns aKnnVectorsReaderto read the vectors from the index.fieldsWriter(SegmentWriteState state) Returns aFlatVectorsWriterto write the vectors to the index.intgetMaxDimensions(String fieldName) Returns the maximum number of vector dimensions supported by this codec for the given field nametoString()Methods inherited from class org.apache.lucene.codecs.KnnVectorsFormat
availableKnnVectorsFormats, forName, getName, reloadKnnVectorsFormat
-
Field Details
-
QUANTIZED_VECTOR_COMPONENT
- See Also:
-
NAME
- See Also:
-
-
Constructor Details
-
Lucene104ScalarQuantizedVectorsFormat
public Lucene104ScalarQuantizedVectorsFormat()Creates a new instance with UNSIGNED_BYTE encoding. -
Lucene104ScalarQuantizedVectorsFormat
public Lucene104ScalarQuantizedVectorsFormat(Lucene104ScalarQuantizedVectorsFormat.ScalarEncoding encoding) Creates a new instance with the chosen quantization encoding.
-
-
Method Details
-
fieldsWriter
Description copied from class:FlatVectorsFormatReturns aFlatVectorsWriterto write the vectors to the index.- Specified by:
fieldsWriterin classFlatVectorsFormat- Throws:
IOException
-
fieldsReader
Description copied from class:FlatVectorsFormatReturns aKnnVectorsReaderto read the vectors from the index.- Specified by:
fieldsReaderin classFlatVectorsFormat- Throws:
IOException
-
getMaxDimensions
Description copied from class:KnnVectorsFormatReturns the maximum number of vector dimensions supported by this codec for the given field nameCodecs implement this method to specify the maximum number of dimensions they support.
- Overrides:
getMaxDimensionsin classFlatVectorsFormat- Parameters:
fieldName- the field name- Returns:
- the maximum number of vector dimensions.
-
toString
-