@@ -19,12 +19,15 @@ use tracing::instrument;
19
19
use crate :: vector:: ivf:: transform:: PartitionTransformer ;
20
20
use crate :: vector:: { pq:: ProductQuantizer , transform:: Transformer } ;
21
21
22
+ use super :: flat:: transform:: FlatTransformer ;
22
23
use super :: pq:: transform:: PQTransformer ;
23
24
use super :: quantizer:: Quantization ;
24
25
use super :: residual:: ResidualTransform ;
26
+ use super :: sq:: transform:: SQTransformer ;
27
+ use super :: sq:: ScalarQuantizer ;
25
28
use super :: transform:: KeepFiniteVectors ;
26
29
use super :: { quantizer:: Quantizer , residual:: compute_residual} ;
27
- use super :: { PART_ID_COLUMN , PQ_CODE_COLUMN } ;
30
+ use super :: { PART_ID_COLUMN , PQ_CODE_COLUMN , SQ_CODE_COLUMN } ;
28
31
29
32
pub mod builder;
30
33
pub mod shuffler;
@@ -68,12 +71,12 @@ pub fn new_ivf_transformer_with_quantizer(
68
71
vector_column,
69
72
pq,
70
73
range,
71
- false ,
72
74
) ) ,
73
- Quantizer :: Scalar ( _ ) => Ok ( IvfTransformer :: with_sq (
75
+ Quantizer :: Scalar ( sq ) => Ok ( IvfTransformer :: with_sq (
74
76
centroids,
75
77
metric_type,
76
78
vector_column,
79
+ sq,
77
80
range,
78
81
) ) ,
79
82
}
@@ -143,6 +146,8 @@ impl IvfTransformer {
143
146
) ) ) ;
144
147
}
145
148
149
+ transforms. push ( Arc :: new ( FlatTransformer :: new ( vector_column) ) ) ;
150
+
146
151
Self :: new ( centroids, distance_type, transforms)
147
152
}
148
153
@@ -153,7 +158,6 @@ impl IvfTransformer {
153
158
vector_column : & str ,
154
159
pq : ProductQuantizer ,
155
160
range : Option < Range < u32 > > ,
156
- with_pq_code : bool , // Pass true for v1 index format, otherwise false.
157
161
) -> Self {
158
162
let mut transforms: Vec < Arc < dyn Transformer > > = vec ! [
159
163
Arc :: new( KeepFiniteVectors :: new( vector_column) ) ,
@@ -183,27 +187,27 @@ impl IvfTransformer {
183
187
) ) ) ;
184
188
}
185
189
186
- if with_pq_code {
187
- if ProductQuantizer :: use_residual ( distance_type) {
188
- transforms. push ( Arc :: new ( ResidualTransform :: new (
189
- centroids. clone ( ) ,
190
- PART_ID_COLUMN ,
191
- vector_column,
192
- ) ) ) ;
193
- }
194
- transforms. push ( Arc :: new ( PQTransformer :: new (
195
- pq,
190
+ if ProductQuantizer :: use_residual ( distance_type) {
191
+ transforms. push ( Arc :: new ( ResidualTransform :: new (
192
+ centroids. clone ( ) ,
193
+ PART_ID_COLUMN ,
196
194
vector_column,
197
- PQ_CODE_COLUMN ,
198
195
) ) ) ;
199
196
}
197
+ transforms. push ( Arc :: new ( PQTransformer :: new (
198
+ pq,
199
+ vector_column,
200
+ PQ_CODE_COLUMN ,
201
+ ) ) ) ;
202
+
200
203
Self :: new ( centroids, distance_type, transforms)
201
204
}
202
205
203
206
fn with_sq (
204
207
centroids : FixedSizeListArray ,
205
208
metric_type : MetricType ,
206
209
vector_column : & str ,
210
+ sq : ScalarQuantizer ,
207
211
range : Option < Range < u32 > > ,
208
212
) -> Self {
209
213
let mut transforms: Vec < Arc < dyn Transformer > > = vec ! [
@@ -234,6 +238,12 @@ impl IvfTransformer {
234
238
) ) ) ;
235
239
}
236
240
241
+ transforms. push ( Arc :: new ( SQTransformer :: new (
242
+ sq,
243
+ vector_column. to_owned ( ) ,
244
+ SQ_CODE_COLUMN . to_owned ( ) ,
245
+ ) ) ) ;
246
+
237
247
Self :: new ( centroids, distance_type, transforms)
238
248
}
239
249
0 commit comments