{"record":{"id":"9ffa736dab3e5183","repo":"weaviate/weaviate","slug":"get-vector-w","errorCode":null,"errorMessage":"get vector: %w","messagePattern":"get vector: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"usecases/modules/compare.go","lineNumber":54,"sourceCode":"\ttargetVector string,\n\tfindObjectFn modulecapabilities.FindObjectFn,\n\treVectorizeDisabled bool,\n) (bool, models.AdditionalProperties, []float32, error) {\n\tif reVectorizeDisabled {\n\t\treturn true, nil, nil, nil\n\t}\n\n\tshouldReVectorize, oldObject := reVectorizeEmbeddings(ctx, cfg, mod, object, class, sourceProperties, findObjectFn)\n\tif shouldReVectorize {\n\t\treturn shouldReVectorize, nil, nil, nil\n\t}\n\n\tif targetVector == \"\" {\n\t\treturn false, oldObject.AdditionalProperties, oldObject.Vector, nil\n\t} else {\n\t\tvector, err := getVector(oldObject.Vectors[targetVector])\n\t\tif err != nil {\n\t\t\treturn false, nil, nil, fmt.Errorf(\"get vector: %w\", err)\n\t\t}\n\t\treturn false, oldObject.AdditionalProperties, vector, nil\n\t}\n}\n\nfunc getVector(v models.Vector) ([]float32, error) {\n\tswitch vector := v.(type) {\n\tcase nil:\n\t\treturn nil, nil\n\tcase []float32:\n\t\treturn vector, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unrecognized vector type: %T\", v)\n\t}\n}\n\nfunc reVectorizeMulti(ctx context.Context,\n\tcfg moduletools.ClassConfig,","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/modules/compare.go#L36-L72","documentation":"reVectorize() in usecases/modules/compare.go compares an incoming object against the stored embedding to decide if re-vectorization is needed; when a named targetVector is requested it extracts the stored vector via getVector(). This wrapper means extracting the stored named vector failed — typically because the stored vector has a Go type that is neither nil nor []float32.","triggerScenarios":"Object updates/imports on a class with named vectors where oldObject.Vectors[targetVector] holds a [][]float32 (multi-vector) or other type while the single-vector reVectorize path is used, i.e. the module expecting []float32 is reading a named vector written by a multi-vector module.","commonSituations":"Switching a named vector's module from a single-vector vectorizer to a multi-vector one (or vice versa) without re-importing; mixing legacy class.vectorizer code paths with named-vector data; internal state after partial migrations.","solutions":["Ensure the module configured for the named target vector matches the vector's dimensionality/type stored for that vector (single vs multi-vector)","Re-export and re-import affected objects, or rebuild the index, after changing a named vector's vectorizer module","Check class.moduleConfig named-vector settings so multi-vector modules are only used with the multi-vector reVectorize path","Update Weaviate if you hit this after an upgrade — it can indicate a migration bug; pin the failing objects and report it"],"exampleFix":"// before: named vector configured with multi-vector module but read via single-vector path\nmoduleConfig: {\"named-vectors\": {\"vec\": {\"vectorizer\": \"multi2vec-clip\"}}}\n// after: use matching vectorizer type per named vector\nmoduleConfig: {\"named-vectors\": {\"vec\": {\"vectorizer\": \"text2vec-openai\"}}}","handlingStrategy":"type-guard","validationCode":"// before update: confirm the named vector's stored type matches the module\nif mv, ok := old.Vectors[targetVector].([][]float32); ok {\n  return fmt.Errorf(\"named vector %q holds multi-vector data; use multi-vector module\", targetVector)\n}\nif _, ok := old.Vectors[targetVector].([]float32); !ok && old.Vectors[targetVector] != nil {\n  return fmt.Errorf(\"named vector %q has unexpected type\", targetVector)\n}","typeGuard":"func isSingleVector(v models.Vector) bool {\n  _, ok := v.([]float32)\n  return v == nil || ok\n}","tryCatchPattern":"ok, props, vec, err := reVectorize(ctx, cfg, mod, obj, class, srcProps, tv, findFn, disabled)\nif err != nil && strings.Contains(err.Error(), \"get vector:\") {\n  return fmt.Errorf(\"named vector %q type mismatch, re-import data or fix moduleConfig: %w\", tv, err)\n}","preventionTips":["Never switch a named vector between single- and multi-vector modules without re-importing data","Keep named-vector moduleConfig consistent with the data actually stored","Test update flows against a staging collection after any module change"],"tags":["vectorization","named-vectors","type-mismatch"],"backgroundTag":"vector-type-mismatch","analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}