weaviate/weaviate · error

invalid combination of properties

Error message

invalid combination of properties

What it means

Wrapped error from ConfigValidator.Do (modules/text2vec-contextionary/vectorizer/schema_config.go:70). If validateIndexState fails, the error is wrapped as 'invalid combination of properties'. validateIndexState requires that either the class name is vectorized, or at least one indexed property of type text/text[] exists — otherwise no vector position could ever be computed, so the schema is rejected.

Source

Thrown at modules/text2vec-contextionary/vectorizer/schema_config.go:70

	err := cv.validateClassName(ctx, class.Class, icheck.VectorizeClassName())
	if err != nil {
		return fmt.Errorf("invalid class name: %w", err)
	}

	for _, prop := range class.Properties {
		if !icheck.PropertyIndexed(prop.Name) {
			continue
		}

		err = cv.validatePropertyName(ctx, prop.Name,
			icheck.VectorizePropertyName(prop.Name))
		if err != nil {
			return errors.Wrapf(err, "class %q: invalid property name", class.Class)
		}
	}

	if err := cv.validateIndexState(ctx, class, icheck); err != nil {
		return errors.Wrap(err, "invalid combination of properties")
	}

	cv.checkForPossibilityOfDuplicateVectors(ctx, class, icheck)

	return nil
}

func (cv *ConfigValidator) validateClassName(ctx context.Context, className string,
	vectorizeClass bool,
) error {
	// class name
	if !vectorizeClass {
		// if the user chooses not to vectorize the class, we don't need to check
		// if its c11y-valid or not
		return nil
	}

	camelParts := camelcase.Split(className)

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Set "vectorizeClassName": true in the module config if the class name is contextionary-valid
  2. Add at least one property of type text or text[] that is indexed and skipVectorization not set
  3. Use a different vectorizer suited to non-text data (e.g. multi2vec or img2vec)
  4. Check the wrapped inner error (property datatype or 'invalid properties...' message) for the exact failing condition

Example fix

// before: no vectorizable input
{"class":"Metrics","moduleConfig":{"text2vec-contextionary":{"vectorizeClassName":false}}}
// after
{"class":"Metrics","moduleConfig":{"text2vec-contextionary":{"vectorizeClassName":true}}}
Defensive patterns

Strategy: validation

Validate before calling

hasText := false
for _, p := range class.Properties {
	if len(p.DataType) > 0 && (p.DataType[0] == "text" || p.DataType[0] == "text[]") && p.Indexed() {
		hasText = true
	}
}
if !hasText && !vectorizeClassName {
	return errors.New("need vectorizeClassName:true or at least one indexed text property")
}

Try / catch

_, err := client.Schema.ClassCreator().WithClass(class).Do(ctx)
if err != nil && strings.Contains(err.Error(), "invalid combination of properties") {
	// enable vectorizeClassName or add an indexed text property, then retry
}

Prevention

When it happens

Trigger: Creating a class with vectorizeClassName:false (or the name being skipped) where no property is both indexed and text-like — e.g. all props are int/number/bool, or the only text props have indexFilterable/skipped indexing, or properties lack datatypes.

Common situations: Users vectorizing metadata-only classes (numbers, dates) with text2vec-contextionary; excluding every text property from indexing; forgetting 'vectorizeClassName': true on a class with no text props.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/50239eb71531e07c. Report an issue: GitHub.