{"record":{"id":"49f2382542a909ca","repo":"quickwit-oss/quickwit","slug":"set-query-need-to-target-a-specific-field","errorCode":null,"errorMessage":"set query need to target a specific field","messagePattern":"set query need to target a specific field","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-query/src/query_ast/user_input_query.rs","lineNumber":165,"sourceCode":"                        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 } => {\n                let field_names: Vec<String> = if let Some(field) = field.as_ref() {\n                    vec![field.to_string()]\n                } else {\n                    default_search_fields.to_vec()\n                };\n                if field_names.is_empty() {\n                    anyhow::bail!(\"set query need to target a specific field\");\n                }\n                let mut terms_per_field: HashMap<String, BTreeSet<String>> = Default::default();\n                let terms: BTreeSet<String> = elements.into_iter().collect();\n                for field in field_names {\n                    terms_per_field.insert(field.to_string(), terms.clone());\n                }\n                let term_set_query = query_ast::TermSetQuery { terms_per_field };\n                Ok(term_set_query.into())\n            }\n            UserInputLeaf::Exists { field } => Ok(FieldPresenceQuery { field }.into()),\n            UserInputLeaf::Regex { field, pattern } => {\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!(\"regex query without field is not supported\");\n                } else {","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-query/src/query_ast/user_input_query.rs#L147-L183","documentation":"A UserInputLeaf::Set (membership test like `IN {a b c}`) expands to term queries over one or more target fields. The field is either explicit or taken from default_search_fields; when both are absent the field name list is empty and the conversion bails because a set query must target at least one concrete field.","triggerScenarios":"Parsing a set-style query leaf without a field prefix while default_search_fields is empty, e.g. `parse_user_query(\"IN {apple banana}\")` with no defaults.","commonSituations":"Users entering Elasticsearch-like IN/set syntax in the Quickwit UI without a field; search APIs invoked without default search field configuration.","solutions":["Prefix the set with a field: `level IN {error warn}` (or the syntax Quickwit expects with field).","Supply a default search field so unfielded set queries resolve.","Rewrite as an explicit boolean/term query AST targeting the field."],"exampleFix":"// before\nparse_user_query(\"IN {error warn}\")?\n// after\nparse_user_query(\"level:IN {error warn}\")?","handlingStrategy":"validation","validationCode":"if is_set_query(query_str) && !query_str.contains(':') && default_search_fields.is_empty() {\n    return Err(\"set query requires an explicit field\");\n}","typeGuard":null,"tryCatchPattern":"match parse_user_query(q) {\n    Err(e) if e.to_string().contains(\"set query need to target\") => {\n        // retry with field-qualified set query\n    }\n    r => r?,\n}","preventionTips":["Always qualify set/IN queries with a field.","Ensure a default search field exists where free-form set syntax is accepted.","Validate query syntax in the UI before submitting."],"tags":["set-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"}