weaviate/weaviate · error
%w: unrecognized data type for property: %s
Error message
%w: unrecognized data type for property: %s
What it means
After resolving the groupBy property name, groupResults resolves its data type with schema.FindPropertyDataTypeWithRefs. Failure means the property's declared dataType cannot be interpreted by the schema — an internal schema-consistency problem rather than a bad user input name (the name resolved, its type didn't).
Source
Thrown at adapters/repos/db/shard_group_by.go:45
)
func (s *Shard) groupResults(ctx context.Context, ids []uint64,
dists []float32, groupBy *searchparams.GroupBy,
additional additional.Properties, properties []string,
) ([]*storobj.Object, []float32, error) {
objsBucket := s.store.Bucket(helpers.ObjectsBucketLSM)
className := s.index.Config.ClassName
class := s.index.getSchema.ReadOnlyClass(className.String())
if class == nil {
return nil, nil, fmt.Errorf("could not find class %s in schema", className)
}
prop, err := schema.GetPropertyByName(class, groupBy.Property)
if err != nil {
return nil, nil, fmt.Errorf("%w: unrecognized property: %s", err, groupBy.Property)
}
dt, err := schema.FindPropertyDataTypeWithRefs(s.index.getSchema.ReadOnlyClass, prop.DataType, false, "")
if err != nil {
return nil, nil, fmt.Errorf("%w: unrecognized data type for property: %s", err, groupBy.Property)
}
var props []string
props = append(props, properties...)
for _, propTmp := range groupBy.Properties {
props = append(props, propTmp.Name)
}
return newGrouper(ids, dists, groupBy, objsBucket, dt, additional, props).Do(ctx)
}
type grouper struct {
ids []uint64
dists []float32
groupBy *searchparams.GroupBy
additional additional.Properties
propertyDataType schema.PropertyDataType
objBucket *lsmkv.BucketView on GitHub (pinned to 75aa4b6d11)
Solutions
- Inspect the property's dataType in GET /v1/schema and correct it via the schema update API (PATCH /v1/schema/{className})
- If a cross-reference type is dangling, fix or remove the reference property
- Restore schema from a backup taken before the corrupting change
- Report/verify against the Weaviate version: check release notes for dataType changes
Defensive patterns
Strategy: fallback
Validate before calling
// verify the property's dataType resolves const prop = schema.classes.find(c => c.class === cls) ?.properties.find(p => p.name === name) const knownTypes = ["text","string","int","number","boolean","date","geoCoordinates", "blob","phoneNumber","uuid", "text[]","int[]", ...]; if (prop && prop.dataType.some(dt => !knownTypes.includes(dt) && !crossRefOk(dt))) repairSchema(cls, name);
Try / catch
// fall back to ungrouped search if schema is inconsistent
objs, err := shard.GroupResults(...)
if err != nil && strings.Contains(err.Error(), "unrecognized data type") {
objs, err = shard.SearchUnGrouped(...) // degraded but usable results
} Prevention
- Avoid hand-editing schema metadata; use the schema API only
- Test schema migrations on a staging copy first
- Keep backups before schema changes
- Upgrade all nodes together to avoid dataType registry mismatches
When it happens
Trigger: Grouped search on a collection whose property has an unresolvable dataType, typically after a broken schema update, migration, or manually edited schema metadata referencing an unknown type or dangling cross-reference.
Common situations: Schema upgraded/downgraded across Weaviate versions where a dataType string is no longer registered; partially applied schema migration; corrupted schema metadata for cross-reference types.
Related errors
- could not find class %s in schema
- %s.%s: %w
- boost condition[%d] property_value: property %q must be of t
- property %q type %v does not support a filterable index
- property %q type %q does not support a filterable index
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/cb546fd6cfdb1c78.
Report an issue: GitHub.