{"record":{"id":"e54b4bebc2923013","repo":"quickwit-oss/quickwit","slug":"query-requires-a-default-search-field-and-none-was","errorCode":null,"errorMessage":"query requires a default search field and none was supplied","messagePattern":"query requires a default search field and none was supplied","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-query/src/query_ast/user_input_query.rs","lineNumber":259,"sourceCode":"    lenient: bool,\n) -> anyhow::Result<QueryAst> {\n    let UserInputLiteral {\n        field_name,\n        phrase,\n        prefix,\n        delimiter,\n        slop,\n    } = user_input_literal;\n    let field_names: Vec<String> = if let Some(field_name) = field_name {\n        vec![field_name]\n    } else {\n        default_search_fields\n            .iter()\n            .map(|field_name| field_name.to_string())\n            .collect()\n    };\n    if field_names.is_empty() {\n        anyhow::bail!(\"query requires a default search field and none was supplied\");\n    }\n    let mode = match delimiter {\n        Delimiter::None => FullTextMode::PhraseFallbackToIntersection,\n        Delimiter::SingleQuotes => FullTextMode::Bool {\n            operator: BooleanOperand::And,\n        },\n        Delimiter::DoubleQuotes => FullTextMode::Phrase { slop },\n    };\n    let full_text_params = FullTextParams {\n        tokenizer: None,\n        mode,\n        zero_terms_query: crate::MatchAllOrNone::MatchNone,\n    };\n    let wildcard = delimiter == Delimiter::None && is_wildcard(&phrase);\n    let mut phrase_queries: Vec<QueryAst> = field_names\n        .into_iter()\n        .map(|field_name| {\n            if prefix {","sourceCodeStart":241,"sourceCodeEnd":277,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-query/src/query_ast/user_input_query.rs#L241-L277","documentation":"convert_user_input_literal turns an unfielded text literal into full-text queries over the default search fields. If the resulting field name list is empty (no explicit field, no defaults configured), the query cannot be evaluated anywhere, so it bails with this error. Quickwit requires every leaf-level text query to target at least one field.","triggerScenarios":"Parsing a bare text query string like `parse_user_query(\"hello world\")` while default_search_fields is empty; issuing REST searches without default_search_field configured on the index.","commonSituations":"Searches against indexes whose default_search_field was never set in the index config; query parsers invoked programmatically without default fields; typos in index configuration leaving the default field blank.","solutions":["Set `default_search_field` in the index config (e.g. to \"body\") so unfielded queries work.","Prefix the query text with a field: `message:hello`.","Pass a default search field explicitly when calling parse_user_query_with_default_fields."],"exampleFix":"// before\nparse_user_query(\"hello world\")? // no defaults\n// after\nparse_user_query_with_default_fields(\"hello world\", &[\"body\"])","handlingStrategy":"validation","validationCode":"if !query_str.contains(':') && default_search_fields.is_empty() {\n    return Err(\"query has no field and no default search field is configured\");\n}","typeGuard":null,"tryCatchPattern":"match parse_user_query(q) {\n    Err(e) if e.to_string().contains(\"default search field\") => {\n        // retry with explicit defaults or field prefix\n    }\n    r => r?,\n}","preventionTips":["Always set default_search_field in index configs used for free-text search.","Pass default search fields explicitly when calling the parser programmatically.","Add a startup config check that default_search_field is non-empty."],"tags":["user-input","missing-field","default-search-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"}