{"record":{"id":"d18b75d1c9cba29f","repo":"weaviate/weaviate","slug":"enable-searchable-requires-targettokenization","errorCode":null,"errorMessage":"enable-searchable requires targetTokenization","messagePattern":"enable-searchable requires targetTokenization","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"adapters/repos/db/reindex_provider.go","lineNumber":742,"sourceCode":"\t\tif !ok {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn []*ShardReindexTaskGeneric{\n\t\t\tNewRuntimeFilterableToRangeableTask(p.logger, p.schemaManager, payload.Properties, payload.Collection, gen),\n\t\t}, nil\n\n\tcase ReindexTypeEnableFilterable:\n\t\tgen, ok := genFor(MigrationDirPrefixEnableFilterable, propsSuffix(payload.Properties))\n\t\tif !ok {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn []*ShardReindexTaskGeneric{\n\t\t\tNewRuntimeEnableFilterableTask(p.logger, payload.Properties, payload.Collection, gen),\n\t\t}, nil\n\n\tcase ReindexTypeEnableSearchable:\n\t\tif payload.TargetTokenization == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"enable-searchable requires targetTokenization\")\n\t\t}\n\t\tgen, ok := genFor(MigrationDirPrefixEnableSearchable, propsSuffix(payload.Properties))\n\t\tif !ok {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn []*ShardReindexTaskGeneric{\n\t\t\tNewRuntimeEnableSearchableTask(p.logger, payload.Properties, payload.Collection, payload.TargetTokenization, gen),\n\t\t}, nil\n\n\tcase ReindexTypeChangeTokenization:\n\t\tif len(payload.Properties) != 1 {\n\t\t\treturn nil, fmt.Errorf(\"change-tokenization requires exactly one property\")\n\t\t}\n\t\tpropName := payload.Properties[0]\n\t\tif payload.TargetTokenization == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"change-tokenization requires targetTokenization\")\n\t\t}\n\t\tif payload.BucketStrategy == \"\" {","sourceCodeStart":724,"sourceCodeEnd":760,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/adapters/repos/db/reindex_provider.go#L724-L760","documentation":"The enable-searchable reindex arm requires a TargetTokenization in the payload: the migration exists to convert a property's inverted index to the searchable (tokenized) strategy, and without a target tokenization the task cannot know how to tokenize text during the rebuild.","triggerScenarios":"Creating an enable-searchable reindex task with payload.TargetTokenization empty — e.g. the API request omitted the target tokenization or the serializer dropped it.","commonSituations":"Client SDK call enabling searchable on a text property without specifying tokenization (word, lowercase, whitespace, trigram, field, gse, kagome_*); copying a payload template from enable-filterable which has no tokenization field.","solutions":["Re-issue the enable-searchable request with targetTokenization set (e.g. \"word\").","Ensure the property's configured tokenization in the schema is copied into the payload when building the task.","Fix the calling code/SDK binding that drops the targetTokenization field."],"exampleFix":"// before\npayload := &ReindexTaskPayload{MigrationType: ReindexTypeEnableSearchable, Properties: []string{\"text\"}}\n// error: enable-searchable requires targetTokenization\n\n// after\npayload := &ReindexTaskPayload{MigrationType: ReindexTypeEnableSearchable, Properties: []string{\"text\"}, TargetTokenization: \"word\"}","handlingStrategy":"validation","validationCode":"if migrationType == \"enable-searchable\" && targetTokenization == \"\" { return errors.New(\"targetTokenization is required for enable-searchable\") }","typeGuard":"func searchablePayloadValid(p *ReindexTaskPayload) bool { return p.MigrationType != ReindexTypeEnableSearchable || p.TargetTokenization != \"\" }","tryCatchPattern":"err := startReindex(payload)\nif err != nil && strings.Contains(err.Error(), \"enable-searchable requires targetTokenization\") {\n  // set TargetTokenization (e.g. \"word\") and retry\n}","preventionTips":["Always supply targetTokenization when enabling searchable.","Copy tokenization from the property's schema config when unsure.","Add client-side schema validation for migration-type-specific required fields."],"tags":["reindex","tokenization","validation","searchable"],"backgroundTag":"missing-target-tokenization","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"}