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

  1. Remove the `facet` field mapping and use a regular text/json field with hierarchical values instead.
  2. Prefer storing hierarchical paths (e.g. '/a/b/c') in a text field and filtering with prefix queries.
  3. 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

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


AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08). Data as JSON: /api/errors/b5e41b3bfe456cee. Report an issue: GitHub.