{"record":{"id":"88d3d15acc52aa8c","repo":"quickwit-oss/quickwit","slug":"duplicated-default-search-field","errorCode":null,"errorMessage":"duplicated default search field: `{}`","messagePattern":"duplicated default search field: `(.+?)`","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-doc-mapper/src/doc_mapper/doc_mapper_impl.rs","lineNumber":248,"sourceCode":"                        tokenizer_config_entry.name,\n                        error\n                    )\n                })?;\n            let does_lowercasing = tokenizer_config_entry\n                .config\n                .filters\n                .iter()\n                .any(|filter| matches!(filter, crate::TokenFilterType::LowerCaser));\n            tokenizer_manager.register(&tokenizer_config_entry.name, tokenizer, does_lowercasing);\n            custom_tokenizer_names.insert(&tokenizer_config_entry.name);\n        }\n        validate_fields_tokenizers(&schema, &tokenizer_manager)?;\n\n        // Resolve default search fields\n        let mut default_search_field_names = Vec::new();\n        for default_search_field_name in &builder.default_search_fields {\n            if default_search_field_names.contains(default_search_field_name) {\n                bail!(\n                    \"duplicated default search field: `{}`\",\n                    default_search_field_name\n                )\n            }\n            let (default_search_field, _json_path) = schema\n                .find_field_with_default(default_search_field_name, dynamic_field)\n                .with_context(|| {\n                    format!(\"unknown default search field `{default_search_field_name}`\")\n                })?;\n            if !schema.get_field_entry(default_search_field).is_indexed() {\n                bail!(\"default search field `{default_search_field_name}` is not indexed\",);\n            }\n            default_search_field_names.push(default_search_field_name.clone());\n        }\n\n        // Resolve tag fields\n        for tag_field_name in &doc_mapping.tag_fields {\n            validate_tag(tag_field_name, &schema)?;","sourceCodeStart":230,"sourceCodeEnd":266,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-doc-mapper/src/doc_mapper/doc_mapper_impl.rs#L230-L266","documentation":"During default-search-field resolution, each name in `builder.default_search_fields` is checked against a list of names already processed. Duplicated default search field entries are rejected because the same field would be searched redundantly and it usually signals a config mistake.","triggerScenarios":"`QuickwitDocMapper::try_from` where `default_search_fields` (built from `doc_mapping.default_search_fields`) contains the same field name twice.","commonSituations":"Listing both a field and its subpath, or duplicate YAML list entries after merging configs / editing by hand.","solutions":["Remove the duplicate entry from `default_search_fields` in the index config.","Check for near-duplicates like `my_field` and a JSON subpath variant that resolves to the same name."],"exampleFix":"# before\ndefault_search_fields: [message, message]\n\n# after\ndefault_search_fields: [message]","handlingStrategy":"validation","validationCode":"fn check_dup_default_search_fields(cfg: &serde_yaml::Value) -> Result<(), String> {\n    let mut seen = std::collections::HashSet::new();\n    if let Some(fields) = cfg[\"doc_mapping\"][\"default_search_fields\"].as_sequence() {\n        for f in fields {\n            let name = f.as_str().unwrap_or_default();\n            if !seen.insert(name) {\n                return Err(format!(\"duplicated default search field: {name}\"));\n            }\n        }\n    }\n    Ok(())\n}","typeGuard":null,"tryCatchPattern":"match QuickwitDocMapper::try_from(&index_config) {\n    Ok(m) => m,\n    Err(e) if e.to_string().contains(\"duplicated default search field\") => {\n        eprintln!(\"De-duplicate doc_mapping.default_search_fields: {e}\");\n        return Err(e);\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["De-duplicate the default_search_fields list before writing it to config.","When merging configs programmatically, use a set union instead of concatenation.","Watch for near-duplicates that resolve to the same field path."],"tags":["config","search-fields","duplicate"],"backgroundTag":"schema-validation-failed","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}