{"id":"fb0e21c0b63c9b2f","repo":"go-redis/redis","slug":"invalid-results-format","errorCode":null,"errorMessage":"invalid results format","messagePattern":"invalid results format","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"search_commands.go","lineNumber":3071,"sourceCode":"\t\tvsimCursorID, ok2 := resultMap[\"VSIM\"].(int64)\n\t\tif !ok1 || !ok2 {\n\t\t\treturn FTHybridResult{}, nil, fmt.Errorf(\"invalid cursor result format\")\n\t\t}\n\t\treturn FTHybridResult{}, &FTHybridCursorResult{\n\t\t\tSearchCursorID: int(searchCursorID),\n\t\t\tVsimCursorID:   int(vsimCursorID),\n\t\t}, nil\n\t}\n\n\t// Parse regular result\n\ttotalResults, ok := resultMap[\"total_results\"].(int64)\n\tif !ok {\n\t\treturn FTHybridResult{}, nil, fmt.Errorf(\"invalid total_results format\")\n\t}\n\n\tresultsData, ok := resultMap[\"results\"].([]interface{})\n\tif !ok {\n\t\treturn FTHybridResult{}, nil, fmt.Errorf(\"invalid results format\")\n\t}\n\n\t// Parse each result item\n\tresults := make([]map[string]interface{}, 0, len(resultsData))\n\tfor _, item := range resultsData {\n\t\t// Try parsing as map[string]interface{} first (RESP3 format)\n\t\tif itemMap, ok := item.(map[string]interface{}); ok {\n\t\t\tresults = append(results, itemMap)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Try parsing as map[interface{}]interface{} (alternative RESP3 format)\n\t\tif rawMap, ok := item.(map[interface{}]interface{}); ok {\n\t\t\titemMap := make(map[string]interface{})\n\t\t\tfor k, v := range rawMap {\n\t\t\t\tif keyStr, ok := k.(string); ok {\n\t\t\t\t\titemMap[keyStr] = v\n\t\t\t\t}","sourceCodeStart":3053,"sourceCodeEnd":3089,"githubUrl":"https://github.com/go-redis/redis/blob/36d97525cd8076aed67cddf54778e9ea84550929/search_commands.go#L3053-L3089","documentation":"Raised in parseFTHybrid (search_commands.go:3069-3072) when the 'results' entry of the FTHybrid reply map is not a []interface{}. The results must be an array of result items.","triggerScenarios":"FHybrid reply where 'results' is missing (nil), or returned as a map/string instead of an array — usually due to version drift.","commonSituations":"Mismatched module versions, or a reply shape where the server collapsed results into a different container.","solutions":["Inspect RawResult() for the 'results' value's Go type.","Confirm the server hybrid module is the version go-redis targets.","Upgrade both ends to current versions.","Reproduce via redis-cli."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"res, _, err := client.FTHybridWithArgs(ctx, idx, opts).Result()\nif err != nil && strings.Contains(err.Error(), \"invalid results format\") {\n    raw, _ := cmd.RawVal()\n    log.Printf(\"fthybrid results not array; raw=%#v\", raw)\n}","preventionTips":["Upgrade the server hybrid module if results shape changed.","Capture RawVal() for diagnosis.","Reproduce via redis-cli."],"tags":["redisearch","ft-hybrid","response-parsing"],"analyzedSha":"36d97525cd8076aed67cddf54778e9ea84550929","analyzedAt":"2026-08-06T01:08:27.376Z","schemaVersion":2}