weaviate/weaviate · error

operator %v not supported

Error message

operator %v not supported

What it means

RowReader.Read dispatches on the filter operator (rr.operator) to a dedicated read method (equal, greaterThan, lessThan, like, etc.). If the operator stored on the RowReader matches none of the known cases, Read returns this error. For callers this means the filter query was built with an operator this inverted-index row reader cannot handle — typically a bug or an operator valid elsewhere in the filter engine but not supported for this index type.

Source

Thrown at adapters/repos/db/inverted/row_reader.go:70

	switch rr.operator {
	case filters.OperatorEqual:
		return rr.equal(ctx, readFn)
	case filters.OperatorNotEqual:
		return rr.notEqual(ctx, readFn)
	case filters.OperatorGreaterThan:
		return rr.greaterThan(ctx, readFn, false)
	case filters.OperatorGreaterThanEqual:
		return rr.greaterThan(ctx, readFn, true)
	case filters.OperatorLessThan:
		return rr.lessThan(ctx, readFn, false)
	case filters.OperatorLessThanEqual:
		return rr.lessThan(ctx, readFn, true)
	case filters.OperatorLike:
		return rr.like(ctx, readFn)
	case filters.OperatorIsNull: // we need to fetch a row with a given value (there is only nil and !nil) and can reuse equal to get the correct row
		return rr.equal(ctx, readFn)
	default:
		return fmt.Errorf("operator %v not supported", rr.operator)
	}
}

// equal is a special case, as we don't need to iterate, but just read a single
// row
func (rr *RowReader) equal(ctx context.Context, readFn ReadFn) error {
	v, err := rr.equalHelper(ctx)
	if err != nil {
		return err
	}

	_, err = readFn(rr.value, rr.transformToBitmap(v), noopRelease)
	return err
}

func (rr *RowReader) notEqual(ctx context.Context, readFn ReadFn) error {
	rr.isDenyList = true
	return rr.equal(ctx, readFn)

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Check the filter operator against the supported operators for the property's data type (see Weaviate filter docs) and switch to a supported one (Equal, GreaterThan, LessThan, Like, IsNull, etc.).
  2. If you need ContainsAny/ContainsAll or geo operators, use a property type/index that supports them (e.g. text on the standard inverted index, geo on the geo index).
  3. If the operator should be supported, upgrade Weaviate — newer versions add missing operator dispatches — or file an issue with the failing query.
  4. Ensure programmatically built filters set a valid, non-zero operator constant.

Example fix

// before
filters.WhereFilter{Operator: filters.OperatorWithinGeoRange, ValueText: ...} // unsupported here
// after
filters.WhereFilter{Operator: filters.OperatorLike, ValueText: "ber*"}
Defensive patterns

Strategy: validation

Validate before calling

const supportedRowReaderOperators = new Set(['equal','GreaterThan','GreaterThanEqual','lessThan','lessThanEqual','Like','IsNull']);
if (!supportedRowReaderOperators.has(filter.operator)) {
  throw new Error(`Operator ${filter.operator} not supported on this property/index`);
}

Try / catch

try {
  return await query();
} catch (e) {
  if (String(e).includes('not supported')) {
    // fall back to a supported operator or fetch-and-filter client-side
    return fallbackQuery();
  }
  throw e;
}

Prevention

When it happens

Trigger: A where-filter is executed whose operator (filters.Operator value) is not in the switch in RowReader.Read (anything other than Equal, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, Like, IsNull) — e.g. ContainsAny/ContainsAll, WithinGeoRange, or a newly added operator reaching a code path (docBitmapInvertedSet) that lacks support for it.

Common situations: Using an operator unsupported for the target data type/index (e.g. containsAny on a value where only row-reader-based reads exist); version skew where a new operator was introduced but not propagated to all readers; programmatic query construction passing an uninitialized/zero-value operator.

Related errors


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