{"record":{"id":"37105f639d3a3684","repo":"quickwit-oss/quickwit","slug":"range-query-without-field-is-not-supported","errorCode":null,"errorMessage":"range query without field is not supported","messagePattern":"range query without field is not supported","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-query/src/query_ast/user_input_query.rs","lineNumber":138,"sourceCode":"            }\n            Ok(bool_query.into())\n        }\n        UserInputAst::Leaf(leaf) => match *leaf {\n            UserInputLeaf::Literal(literal) => {\n                convert_user_input_literal(literal, default_search_fields, lenient)\n            }\n            UserInputLeaf::All => Ok(QueryAst::MatchAll),\n            UserInputLeaf::Range {\n                field,\n                lower,\n                upper,\n            } => {\n                let field = if let Some(field) = field {\n                    field\n                } else if default_search_fields.len() == 1 {\n                    default_search_fields[0].clone()\n                } else if default_search_fields.is_empty() {\n                    bail!(\"range query without field is not supported\");\n                } else {\n                    bail!(\"range query with multiple fields is not supported\");\n                };\n                let convert_bound = |user_input_bound: UserInputBound| match user_input_bound {\n                    UserInputBound::Inclusive(user_text) => {\n                        Bound::Included(JsonLiteral::String(user_text))\n                    }\n                    UserInputBound::Exclusive(user_text) => {\n                        Bound::Excluded(JsonLiteral::String(user_text))\n                    }\n                    UserInputBound::Unbounded => Bound::Unbounded,\n                };\n                let range_query = query_ast::RangeQuery {\n                    field,\n                    lower_bound: convert_bound(lower),\n                    upper_bound: convert_bound(upper),\n                };\n                Ok(range_query.into())","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-query/src/query_ast/user_input_query.rs#L120-L156","documentation":"In convert_user_input_ast_to_query_ast, a UserInputLeaf::Range that has no explicit field must have its field inferred from default_search_fields. With an empty default search field list there is nothing to infer from, so the conversion fails. Quickwit does not support field-less range queries when no default field is configured.","triggerScenarios":"Parsing a query string with an unfielded range like `timestamp:[2024-01-01 TO *]` (or `>=<value>` leaf without field) while default_search_fields is empty, via parse_user_query or nested conversion.","commonSituations":"Users typing Lucene-style range queries in the search bar of an index whose default search field is not set; APIs calling the user-input parser without passing default fields.","solutions":["Prefix the range with a field name: `my_field:[a TO b]`.","Configure/submit a default search field so unfielded queries have a target.","Rewrite the query as an explicit range_query DSL node with a field."],"exampleFix":"// before\nlet ast = parse_user_query(\"[2024-01-01 TO 2024-12-31]\")?;\n// after\nlet ast = parse_user_query(\"timestamp:[2024-01-01 TO 2024-12-31]\")?;","handlingStrategy":"validation","validationCode":"if !query_str.contains(':') && query_str.contains(\" TO \") && default_search_fields.is_empty() {\n    return Err(\"range query needs an explicit field or a default search field\");\n}","typeGuard":null,"tryCatchPattern":"match parse_user_query(q) {\n    Err(e) if e.to_string().contains(\"range query without field\") => {\n        // retry with an explicit field prefix\n    }\n    r => r?,\n}","preventionTips":["Always prefix range queries with a field name in user-facing query strings.","Configure default_search_field on indexes that accept free-text queries.","Reject unfielded range syntax early in your own query input validation."],"tags":["range-query","user-input","missing-field"],"backgroundTag":"missing-required-argument","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}