{"record":{"id":"e86dad8fc69e885e","repo":"quickwit-oss/quickwit","slug":"range-query-with-multiple-fields-is-not-supported","errorCode":null,"errorMessage":"range query with multiple fields is not supported","messagePattern":"range query with multiple fields is not supported","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-query/src/query_ast/user_input_query.rs","lineNumber":140,"sourceCode":"        }\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())\n            }\n            UserInputLeaf::Set { field, elements } => {","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-query/src/query_ast/user_input_query.rs#L122-L158","documentation":"Same inference path as the no-field case: a field-less range leaf must pick a single field from default_search_fields. If more than one default search field is configured, the target is ambiguous, and Quickwit refuses to guess, bailing with this error.","triggerScenarios":"Parsing an unfielded range query string while default_search_fields contains 2+ entries, e.g. `parse_user_query(\"[1 TO 10]\")` with defaults [\"title\", \"body\"].","commonSituations":"Indexes or search requests configured with multiple default search fields while users issue shorthand range queries; migration from single-default-field setups to multi-field defaults breaking old query strings.","solutions":["Qualify the range with an explicit field name in the query string.","Reduce the request's default search fields to one when unfielded ranges are used.","Use the structured range_query DSL (which requires a field) instead of the shorthand syntax."],"exampleFix":"// before\nparse_user_query_with_default_fields(\"[1 TO 10]\", &[\"title\", \"body\"])\n// after\nparse_user_query_with_default_fields(\"title:[1 TO 10]\", &[\"title\", \"body\"])","handlingStrategy":"validation","validationCode":"if !query_str.contains(':') && query_str.contains(\" TO \") && default_search_fields.len() > 1 {\n    return Err(\"unfielded range query ambiguous with multiple default fields; qualify the field\");\n}","typeGuard":null,"tryCatchPattern":"match parse_user_query(q) {\n    Err(e) if e.to_string().contains(\"range query with multiple fields\") => {\n        // retry with an explicit field prefix\n    }\n    r => r?,\n}","preventionTips":["Use at most one default search field if users rely on unfielded range shorthand.","Require field-qualified ranges in shared query templates.","Detect ':' absence in range syntax during input preprocessing."],"tags":["range-query","user-input","ambiguous-fields"],"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"}