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
- 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.).
- 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).
- If the operator should be supported, upgrade Weaviate — newer versions add missing operator dispatches — or file an issue with the failing query.
- 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
- Cross-check each where-operator against the documented supported operators for the property's data type before issuing the query.
- Avoid ContainsAny/ContainsAll/geo operators on properties/indexes that only support row-reader operators.
- Keep all nodes on the same Weaviate version so newly added operators are handled everywhere.
- When building filters programmatically, always set an explicit valid operator constant.
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
- build inverted filter allow list
- unrecognized operator: %s
- retrieve doc IDs from searcher: %w
- could not find bucket for property %v
- buildRecGroupExecutor: root property %q not found: %w
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/76ffe918c4560776.
Report an issue: GitHub.