weaviate/weaviate · error

child operand at position %d

Error message

child operand at position %d

What it means

A nested operand inside an And/Or/Not filter failed its own validation, and the error is re-wrapped with the operand's position so users can locate which branch of the where-clause is bad. The root cause is in the inner error (e.g. unknown property, bad operator); this wrapper only adds positional context while other siblings continue to be validated and joined.

Source

Thrown at entities/filters/filters_validator.go:52

	if filters == nil {
		return errors.New("empty where")
	}
	cw := newClauseWrapper(filters.Root)
	if err := validateClause(authorizedGetClass, cw); err != nil {
		return err
	}
	cw.updateClause()
	return nil
}

func validateClause(authorizedGetClass func(string) (*models.Class, error), cw *clauseWrapper) error {
	// check if nested
	if cw.getOperands() != nil {
		var errs []error

		for i, child := range cw.getOperands() {
			if err := validateClause(authorizedGetClass, child); err != nil {
				errs = append(errs, errors.Wrapf(err, "child operand at position %d", i))
			}
		}

		if len(errs) > 0 {
			return mergeErrs(errs)
		}
		return nil
	}

	// validate current

	className := cw.getClassName()
	propName := cw.getPropertyName()

	if IsInternalProperty(propName) {
		return validateInternalPropertyClause(propName, cw)
	}

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Read the inner error: it names the actual problem in that operand
  2. Fix or remove the operand at the reported position in the where filter
  3. Flatten deeply nested filters client-side to make positions easier to map
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at entities/filters/filters_validator.go:52 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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