quickwit-oss/quickwit · error

index ID pattern `{pattern}` is invalid: patterns must not c

Error message

index ID pattern `{pattern}` is invalid: patterns must not contain multiple consecutive `*`

What it means

quickwit-config validates index ID patterns used for wildcard index selection. A pattern may contain at most one `*` wildcard; consecutive stars (`**`) are rejected because multiple stars bring no matching value and only produce confusing, overly broad patterns. The check runs in `validate_index_id_pattern`, invoked during config validation and when building regex sets for pattern-based searches.

Source

Thrown at quickwit/quickwit-config/src/lib.rs:183

            .expect("regular expression should compile")
    });

    let regex = if allow_negative {
        &IDENTIFIER_REGEX_WITH_GLOB_PATTERN_NEGATIVE
    } else {
        &IDENTIFIER_REGEX_WITH_GLOB_PATTERN
    };

    if !regex.is_match(pattern) {
        bail!(
            "index ID pattern `{pattern}` is invalid: patterns must match the following regular \
             expression: `^[a-zA-Z\\*][a-zA-Z0-9-_\\.\\*]{{0,254}}$`"
        );
    }
    // Forbid multiple stars in the pattern to force the user making simpler patterns
    // as multiple stars does not bring any value.
    if pattern.contains("**") {
        bail!(
            "index ID pattern `{pattern}` is invalid: patterns must not contain multiple \
             consecutive `*`"
        );
    }
    // If there is no star in the pattern, we need at least 3 characters.
    if !pattern.contains('*') && pattern.len() < 3 {
        bail!(
            "index ID pattern `{pattern}` is invalid: an index ID must have at least 3 characters"
        );
    }
    Ok(())
}

pub fn validate_node_id(node_id: &NodeIdRef) -> anyhow::Result<()> {
    if !is_valid_hostname(node_id.as_str()) {
        bail!(
            "node identifier `{node_id}` is invalid. node identifiers must be valid short \
             hostnames (see RFC 1123)"

View on GitHub (pinned to a39730c5cd)

Solutions

  1. Replace `**` with a single `*` in the pattern; a single trailing star already matches any suffix.
  2. If you meant to match nested separators, remember Quickwit index IDs cannot contain `/`, so one `*` suffices.
  3. Validate patterns before submitting by checking `!pattern.contains("**")`.

Example fix

// before
index_id_patterns: ["logs-**"]
// after
index_id_patterns: ["logs-*"]
Defensive patterns

Strategy: validation

Validate before calling

fn is_valid_index_id_pattern(pattern: &str) -> bool {
    pattern.contains('*') && !pattern.contains("**")
}

Prevention

When it happens

Trigger: Calling `validate_index_id_pattern("logs**")` or any config validation path (`validate`, `build_regex_set`, `extract_otel_traces_index_id_patterns_from_metadata`, `es_compat_index_multi_search`) with a pattern string containing `**` anywhere.

Common situations: Users writing `my-index**` in index config or search requests assuming glob-style multi-star semantics; copy-pasted patterns from Elasticsearch (which allows `*` repetition); scripted pattern generation that appends `*` to a pattern already ending in `*`.

Related errors


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