quickwit-oss/quickwit · error
Facet are not supported in quickwit yet.
Error message
Facet are not supported in quickwit yet.
What it means
When building field mapping entries from an index config, a mapping whose type is `facet` reaches an explicit unimplemented!(): facets are a Tantivy feature Quickwit has not implemented. Unlike `custom` fields (which produce a proper bail! error), facet mappings abort with a panic.
Source
Thrown at quickwit/quickwit-doc-mapper/src/doc_mapper/field_mapping_entry.rs:774
Ok(FieldMappingType::I64(numeric_options, cardinality))
}
Type::F64 => {
let numeric_options: QuickwitNumericOptions = serde_json::from_value(json)?;
Ok(FieldMappingType::F64(numeric_options, cardinality))
}
Type::Bool => {
let bool_options: QuickwitBoolOptions = serde_json::from_value(json)?;
Ok(FieldMappingType::Bool(bool_options, cardinality))
}
Type::IpAddr => {
let ip_addr_options: QuickwitIpAddrOptions = serde_json::from_value(json)?;
Ok(FieldMappingType::IpAddr(ip_addr_options, cardinality))
}
Type::Date => {
let date_time_options = serde_json::from_value::<QuickwitDateTimeOptions>(json)?;
Ok(FieldMappingType::DateTime(date_time_options, cardinality))
}
Type::Facet => unimplemented!("Facet are not supported in quickwit yet."),
Type::Custom => bail!("custom fields are not supported in Quickwit"),
Type::Bytes => {
let numeric_options: QuickwitBytesOptions = serde_json::from_value(json)?;
if numeric_options.fast && cardinality == Cardinality::MultiValued {
bail!("fast field is not allowed for array<bytes>");
}
Ok(FieldMappingType::Bytes(numeric_options, cardinality))
}
Type::Json => {
let json_options: QuickwitJsonOptions = serde_json::from_value(json)?;
Ok(FieldMappingType::Json(json_options, cardinality))
}
}
}
impl TryFrom<FieldMappingEntryForSerialization> for FieldMappingEntry {
type Error = String;
View on GitHub (pinned to a39730c5cd)
Solutions
- Remove the `facet` field mapping and use a regular text/json field with hierarchical values instead.
- Prefer storing hierarchical paths (e.g. '/a/b/c') in a text field and filtering with prefix queries.
- File/upvote upstream support for facets in Quickwit.
Example fix
// before
"category": { "type": "facet" }
// after
"category": { "type": "text", "tokenizer": "raw" } Defensive patterns
Strategy: validation
Validate before calling
// validate index config before creating the index:
for (_name, entry) in &doc_mapping.field_mappings {
if entry_type_is(entry, "facet") {
return Err("facet fields are not supported in Quickwit".into());
}
} Try / catch
// replace the unimplemented! with bail! so config errors surface as 400s:
Type::Facet => bail!("facet fields are not supported in quickwit yet"), Prevention
- Never use `type: facet` in Quickwit index configs; it is not a supported mapping type.
- Model hierarchical categories as text fields with delimited paths and prefix queries.
- Run `quickwit index create` against a validated config schema that rejects facet early.
When it happens
Trigger: Declaring `type: facet` in an index config field_mapping_entries and ingesting/creating the index, hitting Type::Facet in the type-deserialization match.
Common situations: Porting Tantivy-based configs to Quickwit; users copying facet examples from Tantivy docs; migrating configs from other search engines that support facets.
Related errors
- read-only
- `record`, `tokenizer`, and `fieldnorms` parameters are allow
- `record` and `tokenizer` parameters are allowed only if inde
- concatenate field uses an unknown field `{sub_field}`
- retention policy requires a timestamp field, but doc mapping
AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08).
Data as JSON: /api/errors/b5e41b3bfe456cee.
Report an issue: GitHub.