{"record":{"id":"1f2d273eeb053870","repo":"jaegertracing/jaeger","slug":"empty-configuration-1f2d27","errorCode":null,"errorMessage":"empty configuration","messagePattern":"empty configuration","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/internal/storageconfig/factory.go","lineNumber":83,"sourceCode":"\t\t\thttpAuth, err = authResolver(backend.Elasticsearch.Authentication, \"elasticsearch\", name)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tfactory, err = es.NewFactory(ctx, *backend.Elasticsearch, telset, httpAuth)\n\tcase backend.Opensearch != nil:\n\t\tvar httpAuth extensionauth.HTTPClient\n\t\tif authResolver != nil {\n\t\t\thttpAuth, err = authResolver(backend.Opensearch.Authentication, \"opensearch\", name)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tfactory, err = es.NewFactory(ctx, *backend.Opensearch, telset, httpAuth)\n\tcase backend.ClickHouse != nil:\n\t\tfactory, err = clickhouse.NewFactory(ctx, *backend.ClickHouse, telset)\n\tdefault:\n\t\terr = errors.New(\"empty configuration\")\n\t}\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to initialize storage '%s': %w\", name, err)\n\t}\n\n\treturn factory, nil\n}\n","sourceCodeStart":65,"sourceCodeEnd":92,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/cmd/internal/storageconfig/factory.go#L65-L92","documentation":"errUnorderedValue reports that the referenced field is indexed in Elasticsearch as a keyword (string), not a number, so ordering/comparison operators that need numeric semantics cannot evaluate on it. The filter is rejected with tracestore.ErrFilterUnsupported to avoid lexicographic comparison silently producing wrong results (e.g. \"9\" > \"10\" as strings).","triggerScenarios":"Applying an ordering operator (>, >=, <, <=) to an attribute or field stored as a keyword — via attributeValueMatch or buildTextComparison — such as tag.http.status_code > 400 where the tag value is stored as a keyword string.","commonSituations":"Numeric range filters on attributes that Jaeger writes as strings (all attribute values are keywords in this schema); porting numeric comparisons from SQL columns; UIs allowing range operators on any attribute.","solutions":["Use equality/inequality or regex-style matching on keyword-indexed fields instead of range operators.","Write the value as a zero-padded or fixed-width string if lexicographic ordering coincides with the desired order, or store the attribute as a numeric-typed value via typed attribute indexing (RFC 0015).","Perform range filtering post-hoc in application code after fetching with an equality match."],"exampleFix":"// before\ntag.http.status_code > 400\n// after\ntag.http.status_code == 500 OR tag.http.status_code == 502 OR tag.http.status_code == 503","handlingStrategy":"fallback","validationCode":"func numericRangeSafe(ref reference, op expression.Operator) bool {\n    return ref.kind == numericField || op == expression.Eq || op == expression.NotEq\n}","typeGuard":null,"tryCatchPattern":"q, err := attributeValueMatch(...)\nif errors.Is(err, tracestore.ErrFilterUnsupported) {\n    // fall back to equality set or post-filter ranges client-side\n}","preventionTips":["Never use range operators on keyword-indexed attributes.","Store numeric attribute values via typed indexing if ranges are needed.","Remember keyword comparison is lexicographic; zero-pad if you must order strings."],"tags":["query-filter","keyword-index","ordering"],"backgroundTag":"keyword-field-range-query","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}