{"record":{"id":"471d4b165a120ca8","repo":"weaviate/weaviate","slug":"the-object-is-invalid-as-weaviate-could-not-extra","errorCode":null,"errorMessage":"the object is invalid, as weaviate could not extract any contextionary-valid words from it. This is the case when you have set the options 'vectorizeClassName: false' and 'vectorizePropertyName: false' in this class' schema definition and not a single property's value contains at least one contextionary-valid word. To fix this, you have several options:\n\n1.) Make sure that the schema class name or the set properties are a contextionary-valid term and include them in vectorization using the 'vectorizeClassName' or 'vectorizePropertyName' setting. In this case the vector position will be composed of both the class/property names and the values for those fields. Even if no property values are contextionary-valid, the overall word corpus is still valid due to the contextionary-valid class/property names.\n\n2.) Alternatively, if you do not want to include schema class/property names in vectorization, you must make sure that at least one text/string property contains at least one contextionary-valid word.\n\n3.) If the word corpus weaviate extracted from your object (see below) does contain enough meaning to build a vector position, but the contextionary did not recognize the words, you can extend the contextionary using the REST API. This is the case\twhen you use mostly industry-specific terms which are not known to the common language contextionary. Once extended, simply reimport this object.\n\nThe following words were extracted from your object: %v\n\nTo learn more about the contextionary and how it behaves, check out: https://www.semi.technology/documentation/weaviate/current/contextionary.html\n\nOriginal error: %v","messagePattern":"the object is invalid, as weaviate could not extract any contextionary-valid words from it\\. This is the case when you have set the options 'vectorizeClassName: false' and 'vectorizePropertyName: false' in this class' schema definition and not a single property's value contains at least one contextionary-valid word\\. To fix this, you have several options:\n\n1\\.\\) Make sure that the schema class name or the set properties are a contextionary-valid term and include them in vectorization using the 'vectorizeClassName' or 'vectorizePropertyName' setting\\. In this case the vector position will be composed of both the class/property names and the values for those fields\\. Even if no property values are contextionary-valid, the overall word corpus is still valid due to the contextionary-valid class/property names\\.\n\n2\\.\\) Alternatively, if you do not want to include schema class/property names in vectorization, you must make sure that at least one text/string property contains at least one contextionary-valid word\\.\n\n3\\.\\) If the word corpus weaviate extracted from your object \\(see below\\) does contain enough meaning to build a vector position, but the contextionary did not recognize the words, you can extend the contextionary using the REST API\\. This is the case\twhen you use mostly industry-specific terms which are not known to the common language contextionary\\. Once extended, simply reimport this object\\.\n\nThe following words were extracted from your object: %v\n\nTo learn more about the contextionary and how it behaves, check out: https://www\\.semi\\.technology/documentation/weaviate/current/contextionary\\.html\n\nOriginal error: %v","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"modules/text2vec-contextionary/vectorizer/vectorizer.go","lineNumber":111,"sourceCode":"\n\treturn vec, additional, nil\n}\n\nfunc (v *Vectorizer) object(ctx context.Context, object *models.Object, overrides map[string]string,\n\tcfg moduletools.ClassConfig,\n) ([]float32, []txt2vecmodels.InterpretationSource, error) {\n\ticheck := NewIndexChecker(cfg)\n\tcorpi, isEmpty := v.objectVectorizer.Texts(ctx, object, icheck)\n\tif isEmpty {\n\t\t// don't vectorize empty text\n\t\treturn nil, nil, nil\n\t}\n\n\tvector, ie, err := v.client.VectorForCorpi(ctx, []string{corpi}, overrides)\n\tif err != nil {\n\t\tswitch {\n\t\tcase errors.As(err, &ErrNoUsableWords{}):\n\t\t\treturn nil, nil, fmt.Errorf(\"the object is invalid, as weaviate could not extract \"+\n\t\t\t\t\"any contextionary-valid words from it. This is the case when you have \"+\n\t\t\t\t\"set the options 'vectorizeClassName: false' and 'vectorizePropertyName: false' in this class' schema definition \"+\n\t\t\t\t\"and not a single property's value \"+\n\t\t\t\t\"contains at least one contextionary-valid word. To fix this, you have several \"+\n\t\t\t\t\"options:\\n\\n1.) Make sure that the schema class name or the set properties are \"+\n\t\t\t\t\"a contextionary-valid term and include them in vectorization using the \"+\n\t\t\t\t\"'vectorizeClassName' or 'vectorizePropertyName' setting. In this case the vector position \"+\n\t\t\t\t\"will be composed of both the class/property names and the values for those fields. \"+\n\t\t\t\t\"Even if no property values are contextionary-valid, the overall word corpus is still valid \"+\n\t\t\t\t\"due to the contextionary-valid class/property names.\"+\n\t\t\t\t\"\\n\\n2.) Alternatively, if you do not want to include schema class/property names \"+\n\t\t\t\t\"in vectorization, you must make sure that at least one text/string property contains \"+\n\t\t\t\t\"at least one contextionary-valid word.\"+\n\t\t\t\t\"\\n\\n3.) If the word corpus weaviate extracted from your object \"+\n\t\t\t\t\"(see below) does contain enough meaning to build a vector position, but the contextionary \"+\n\t\t\t\t\"did not recognize the words, you can extend the contextionary using the \"+\n\t\t\t\t\"REST API. This is the case\twhen you use mostly industry-specific terms which are \"+\n\t\t\t\t\"not known to the common language contextionary. Once extended, simply reimport this object.\"+","sourceCodeStart":93,"sourceCodeEnd":129,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/modules/text2vec-contextionary/vectorizer/vectorizer.go#L93-L129","documentation":"Object() calls the contextionary client's VectorForCorpi and, when the returned error matches the typed ErrNoUsableWords, replaces it with this long user-facing explanation. It means vectorization failed because no extracted word was contextionary-valid, typically when both vectorizeClassName and vectorizePropertyName are false and no property value contains a valid word. The original error (with the extracted words) is appended via 'Original error: %v'.","triggerScenarios":"A Weaviate object import (batch or REST/GraphQL create) into a class using the text2vec-contextionary module where: vectorizeClassName=false, vectorizePropertyName=false, and every property value consists solely of words unknown to the contextionary.","commonSituations":"Users importing objects with only IDs/numbers/foreign-language or domain jargon text while disabling name vectorization; misconfigured schema where all textual content was expected to be vectorized but no valid words exist.","solutions":["Set vectorizeClassName or vectorizePropertyName to true in the class schema so valid schema words contribute to the corpus","Make sure at least one text/string property value contains at least one common English word known to the contextionary","Extend the contextionary via the REST API with your industry-specific terms, then re-import the object"],"exampleFix":"// before\n{\"vectorizer\": {\"text2vec-contextionary\": {\"vectorizeClassName\": false, \"vectorizePropertyName\": false}}}\n// after\n{\"vectorizer\": {\"text2vec-contextionary\": {\"vectorizeClassName\": true, \"vectorizePropertyName\": true}}}","handlingStrategy":"type-guard","validationCode":"// before creating the object, ensure at least one vectorized field has plausible words\nfunc hasUsableText(props map[string]interface{}, vectorizedProps []string) bool {\n\tfor _, p := range vectorizedProps {\n\t\tif s, ok := props[p].(string); ok {\n\t\t\tfor _, w := range strings.Fields(s) {\n\t\t\t\tif len([]rune(w)) >= 3 { return true }\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}","typeGuard":"func isInvalidObjectNoWords(err error) bool {\n\tvar target error\n\treturn strings.Contains(err.Error(), \"could not extract\") &&\n\t\tstrings.Contains(err.Error(), \"Original error\") ||\n\t\terrors.As(err, &target)\n}","tryCatchPattern":"obj, err := batch.ObjectsBatchCreate().WithObject(o).Do(ctx)\nif err != nil {\n\tif strings.Contains(err.Error(), \"could not extract any contextionary-valid words\") {\n\t\t// fix schema settings or enrich the object text\n\t}\n}","preventionTips":["Do not disable both vectorizeClassName and vectorizePropertyName on text2vec-contextionary classes","Require at least one free-text property per class","Validate object payloads (reject ID-only documents) before import","Read the 'words were extracted' list in the message to identify which fields were considered"],"tags":["go","vectorizer","contextionary","weaviate-import"],"backgroundTag":"no-valid-words-for-vectorization","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"}