@@ -353,39 +353,42 @@ func createCollection(ctx context.Context, client *qdrant.Client, collectionName
353353func enableProductionIndexing (ctx context.Context , client * qdrant.Client , collectionName string ) error {
354354 log .Printf ("Enabling production HNSW indexing for collection: %s" , collectionName )
355355
356- // Update HNSW config for each named vector (dirs, names, contents)
356+ // Build named vectors config map
357+ namedVectorsConfig := make (map [string ]* qdrant.VectorParamsDiff )
357358 for _ , vectorName := range []string {"dirs" , "names" , "contents" } {
358- log .Printf (" Updating HNSW config for vector: %s" , vectorName )
359-
360- err := client .UpdateCollection (ctx , & qdrant.UpdateCollection {
361- CollectionName : collectionName ,
359+ namedVectorsConfig [vectorName ] = & qdrant.VectorParamsDiff {
362360 HnswConfig : & qdrant.HnswConfigDiff {
363- M : qdrant .PtrOf (uint64 (48 )),
361+ M : qdrant .PtrOf (uint64 (48 )),
362+ OnDisk : qdrant .PtrOf (false ),
364363 },
365- VectorsConfig : & qdrant.VectorsConfigDiff {
366- Config : & qdrant.VectorsConfigDiff_Params {
367- Params : & qdrant.VectorParamsDiff {
368- HnswConfig : & qdrant.HnswConfigDiff {
369- M : qdrant .PtrOf (uint64 (48 )),
370- OnDisk : qdrant .PtrOf (false ),
371- },
372- },
364+ OnDisk : qdrant .PtrOf (true ), // Keep vectors on disk, only HNSW in RAM
365+ }
366+ }
367+
368+ // Update all named vectors and collection settings in a single call
369+ err := client .UpdateCollection (ctx , & qdrant.UpdateCollection {
370+ CollectionName : collectionName ,
371+ VectorsConfig : & qdrant.VectorsConfigDiff {
372+ Config : & qdrant.VectorsConfigDiff_ParamsMap {
373+ ParamsMap : & qdrant.VectorParamsDiffMap {
374+ Map : namedVectorsConfig ,
373375 },
374376 },
375- OptimizersConfig : & qdrant. OptimizersConfigDiff {
376- IndexingThreshold : qdrant .PtrOf ( uint64 ( 0 )),
377- } ,
378- QuantizationConfig : & qdrant. QuantizationConfigDiff {
379- Quantization : & qdrant.QuantizationConfigDiff_Binary {
380- Binary : & qdrant.BinaryQuantization {
381- AlwaysRam : qdrant .PtrOf ( true ),
382- } ,
377+ },
378+ OptimizersConfig : & qdrant.OptimizersConfigDiff {
379+ IndexingThreshold : qdrant . PtrOf ( uint64 ( 0 )) ,
380+ },
381+ QuantizationConfig : & qdrant.QuantizationConfigDiff {
382+ Quantization : & qdrant.QuantizationConfigDiff_Binary {
383+ Binary : & qdrant.BinaryQuantization {
384+ AlwaysRam : qdrant . PtrOf ( true ) ,
383385 },
384386 },
385- })
386- if err != nil {
387- return fmt .Errorf ("failed to update HNSW for vector %s: %w" , vectorName , err )
388- }
387+ },
388+ })
389+
390+ if err != nil {
391+ return fmt .Errorf ("failed to update HNSW config: %w" , err )
389392 }
390393
391394 log .Printf ("✓ HNSW indexing enabled for %s. Optimizer will build indexes in background." , collectionName )
0 commit comments