{"record":{"id":"5001e2fc0be5d8af","repo":"redis/redis-rb","slug":"invalid-query","errorCode":null,"errorMessage":"Invalid query","messagePattern":"Invalid query","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/redis/commands/modules/search/index.rb","lineNumber":168,"sourceCode":"        # @param highlight [Hash, nil] +HIGHLIGHT+ options\n        # @param sort_by [String, nil] sort field (+SORTBY+)\n        # @param asc [Boolean, nil] sort ascending (default) when +sort_by+ is given; +false+ for descending\n        # @param scorer [String, nil] scoring function name (+SCORER+)\n        # @param explain_score [Boolean, nil] include a score explanation (+EXPLAINSCORE+)\n        # @return [SearchResult] the total count and matching {Document}s (prefix stripped from ids)\n        # @raise [ArgumentError] if no usable query is provided\n        def search(query = nil, query_params: nil, params: nil, dialect: nil,\n                   nocontent: nil, verbatim: nil, no_stopwords: nil, with_scores: nil,\n                   with_payloads: nil, slop: nil, in_order: nil, language: nil,\n                   return_fields: nil, summarize: nil, highlight: nil, sort_by: nil, asc: nil,\n                   scorer: nil, explain_score: nil, &block)\n          if block_given?\n            query = Query.build(&block)\n          elsif query.is_a?(String)\n            query = Query.new(query)\n          end\n\n          raise ArgumentError, \"Invalid query\" unless query.is_a?(Query)\n\n          query_string = query.to_redis_args.first\n\n          sort_order = asc == false ? \"DESC\" : \"ASC\"\n          sortby = sort_by ? [sort_by, sort_order] : query.options[:sortby]\n          limit_ids = query.limit_ids_value\n          # INKEYS needs full Redis keys. Prepend the index prefix to logical ids (mirroring\n          # #add), but leave ids that already carry it alone so callers passing full keys don't\n          # get a doubled prefix that matches nothing.\n          if limit_ids && @prefix\n            limit_ids = limit_ids.map { |id| id.to_s.start_with?(@prefix) ? id : \"#{@prefix}#{id}\" }\n          end\n\n          # An empty RETURN list is not a meaningful per-call value (it would just omit RETURN and\n          # return all fields), so treat it as \"unset\" and fall back to the Query's RETURN list.\n          return_fields = nil if return_fields.is_a?(Array) && return_fields.empty?\n\n          # Build a fresh options hash per call. A per-call keyword argument wins when explicitly","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/redis/redis-rb/blob/2ba9010b91dab9e0fde1fbae3a9aae003f8bc307/lib/redis/commands/modules/search/index.rb#L150-L186","documentation":"Error \"Invalid query\" thrown in redis/redis-rb.","triggerScenarios":"Thrown at lib/redis/commands/modules/search/index.rb:168 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass a valid query string or query object to the search call; empty or malformed query syntax is rejected.","Validate the query syntax against RediSearch query rules before calling search."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2ba9010b91dab9e0fde1fbae3a9aae003f8bc307","analyzedAt":"2026-08-23T03:54:57.017Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}