{"record":{"id":"273435355e569928","repo":"quickwit-oss/quickwit","slug":"custom-fields-are-not-supported-in-quickwit","errorCode":null,"errorMessage":"custom fields are not supported in Quickwit","messagePattern":"custom fields are not supported in Quickwit","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-doc-mapper/src/doc_mapper/field_mapping_entry.rs","lineNumber":775,"sourceCode":"        }\n        Type::F64 => {\n            let numeric_options: QuickwitNumericOptions = serde_json::from_value(json)?;\n            Ok(FieldMappingType::F64(numeric_options, cardinality))\n        }\n        Type::Bool => {\n            let bool_options: QuickwitBoolOptions = serde_json::from_value(json)?;\n            Ok(FieldMappingType::Bool(bool_options, cardinality))\n        }\n        Type::IpAddr => {\n            let ip_addr_options: QuickwitIpAddrOptions = serde_json::from_value(json)?;\n            Ok(FieldMappingType::IpAddr(ip_addr_options, cardinality))\n        }\n        Type::Date => {\n            let date_time_options = serde_json::from_value::<QuickwitDateTimeOptions>(json)?;\n            Ok(FieldMappingType::DateTime(date_time_options, cardinality))\n        }\n        Type::Facet => unimplemented!(\"Facet are not supported in quickwit yet.\"),\n        Type::Custom => bail!(\"custom fields are not supported in Quickwit\"),\n        Type::Bytes => {\n            let numeric_options: QuickwitBytesOptions = serde_json::from_value(json)?;\n            if numeric_options.fast && cardinality == Cardinality::MultiValued {\n                bail!(\"fast field is not allowed for array<bytes>\");\n            }\n            Ok(FieldMappingType::Bytes(numeric_options, cardinality))\n        }\n        Type::Json => {\n            let json_options: QuickwitJsonOptions = serde_json::from_value(json)?;\n            Ok(FieldMappingType::Json(json_options, cardinality))\n        }\n    }\n}\n\nimpl TryFrom<FieldMappingEntryForSerialization> for FieldMappingEntry {\n    type Error = String;\n\n    fn try_from(value: FieldMappingEntryForSerialization) -> Result<Self, String> {","sourceCodeStart":757,"sourceCodeEnd":793,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-doc-mapper/src/doc_mapper/field_mapping_entry.rs#L757-L793","documentation":"Tantivy supports a `Custom` field type, but Quickwit's mapping deserializer does not implement it. Any mapping that resolves to tantivy's Type::Custom is rejected with this message rather than silently ignored, since Quickwit cannot map, index, or search such fields.","triggerScenarios":"Deserializing a FieldMappingType whose field type string maps to Type::Custom in the from_json match — practically only reachable if a type alias resolves to the custom variant; ordinary users cannot select it.","commonSituations":"Forward-porting mappings from other tantivy-based tools that use custom field types; hand-editing serialized schema JSON; future tantivy types surfacing as Custom in older Quickwit versions.","solutions":["Use one of Quickwit's supported field types (text, json, u64, i64, f64, bool, date, bytes, object, concatenate) instead.","Remove the custom-typed field from the mapping.","If you need that capability, check whether a newer Quickwit version supports the corresponding type."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const SUPPORTED: &[&str] = &[\"text\", \"json\", \"u64\", \"i64\", \"f64\", \"bool\", \"date\", \"bytes\", \"object\", \"concatenate\"];\nfn field_type_supported(f: &serde_json::Value) -> bool {\n    let t = f.get(\"type\").and_then(|t| t.as_str()).unwrap_or(\"\");\n    SUPPORTED.contains(&t) || t.starts_with(\"array<\") && SUPPORTED.contains(&t.trim_start_matches(\"array<\").trim_end_matches('>'))\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Restrict generated mappings to Quickwit's documented type list.","Do not import raw tantivy schema JSON into Quickwit configs.","Keep Quickwit versions aligned across clusters to avoid type-alias drift."],"tags":["schema","mapping","unsupported","rust"],"backgroundTag":"unsupported-operation","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"}