{"record":{"id":"76ffe918c4560776","repo":"weaviate/weaviate","slug":"operator-v-not-supported","errorCode":null,"errorMessage":"operator %v not supported","messagePattern":"operator (.+?) not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"adapters/repos/db/inverted/row_reader.go","lineNumber":70,"sourceCode":"\tswitch rr.operator {\n\tcase filters.OperatorEqual:\n\t\treturn rr.equal(ctx, readFn)\n\tcase filters.OperatorNotEqual:\n\t\treturn rr.notEqual(ctx, readFn)\n\tcase filters.OperatorGreaterThan:\n\t\treturn rr.greaterThan(ctx, readFn, false)\n\tcase filters.OperatorGreaterThanEqual:\n\t\treturn rr.greaterThan(ctx, readFn, true)\n\tcase filters.OperatorLessThan:\n\t\treturn rr.lessThan(ctx, readFn, false)\n\tcase filters.OperatorLessThanEqual:\n\t\treturn rr.lessThan(ctx, readFn, true)\n\tcase filters.OperatorLike:\n\t\treturn rr.like(ctx, readFn)\n\tcase 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\n\t\treturn rr.equal(ctx, readFn)\n\tdefault:\n\t\treturn fmt.Errorf(\"operator %v not supported\", rr.operator)\n\t}\n}\n\n// equal is a special case, as we don't need to iterate, but just read a single\n// row\nfunc (rr *RowReader) equal(ctx context.Context, readFn ReadFn) error {\n\tv, err := rr.equalHelper(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = readFn(rr.value, rr.transformToBitmap(v), noopRelease)\n\treturn err\n}\n\nfunc (rr *RowReader) notEqual(ctx context.Context, readFn ReadFn) error {\n\trr.isDenyList = true\n\treturn rr.equal(ctx, readFn)","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/adapters/repos/db/inverted/row_reader.go#L52-L88","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\nfilters.WhereFilter{Operator: filters.OperatorWithinGeoRange, ValueText: ...} // unsupported here\n// after\nfilters.WhereFilter{Operator: filters.OperatorLike, ValueText: \"ber*\"}","handlingStrategy":"validation","validationCode":"const supportedRowReaderOperators = new Set(['equal','GreaterThan','GreaterThanEqual','lessThan','lessThanEqual','Like','IsNull']);\nif (!supportedRowReaderOperators.has(filter.operator)) {\n  throw new Error(`Operator ${filter.operator} not supported on this property/index`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  return await query();\n} catch (e) {\n  if (String(e).includes('not supported')) {\n    // fall back to a supported operator or fetch-and-filter client-side\n    return fallbackQuery();\n  }\n  throw e;\n}","preventionTips":["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."],"tags":["weaviate","filter","operator","inverted-index"],"backgroundTag":"unsupported-operator","analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}