elastic/elasticsearch · error · IllegalArgumentException

missing field [{}] when calculating fingerprint

Error message

missing field [{}] when calculating fingerprint

What it means

Thrown by FingerprintProcessor.execute when one of the configured 'fields' is null/absent in the document and 'ignore_missing' is false (default). The processor iterates fields in reverse and calls getFieldValue with ignoreMissing=true so that absence returns null; if ignore_missing is false the null is an explicit fatal error. The hash cannot be computed for an incomplete field set.

Source

Thrown at modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/FingerprintProcessor.java:89

        this.ignoreMissing = ignoreMissing;
    }

    @Override
    @SuppressWarnings("unchecked")
    public IngestDocument execute(IngestDocument ingestDocument) throws Exception {
        Hasher hasher = threadLocalHasher.get();
        hasher.reset();
        hasher.update(salt);

        var values = new Stack<>();
        for (int k = fields.size() - 1; k >= 0; k--) {
            String field = fields.get(k);
            Object value = ingestDocument.getFieldValue(field, Object.class, true);
            if (value == null) {
                if (ignoreMissing) {
                    continue;
                } else {
                    throw new IllegalArgumentException("missing field [" + field + "] when calculating fingerprint");
                }
            }
            values.push(value);
        }

        if (values.size() > 0) {
            // iteratively traverse document fields
            while (values.isEmpty() == false) {
                var value = values.pop();
                if (value instanceof List<?> list) {
                    for (int k = list.size() - 1; k >= 0; k--) {
                        values.push(list.get(k));
                    }
                } else if (value instanceof Set) {
                    @SuppressWarnings("rawtypes")
                    var set = (Set<Comparable>) value;
                    // process set entries in consistent order
                    var setList = new ArrayList<>(set);

View on GitHub (pinned to db6a809a66)

Solutions

  1. Set 'ignore_missing: true' on the fingerprint processor so missing fields are skipped rather than failing.
  2. Ensure all listed fields are populated upstream, or add a 'set' processor to default them before fingerprinting.
  3. Reduce the 'fields' list to fields guaranteed to be present, or split documents into separate pipelines keyed by type.

Example fix

// before
{"fingerprint": {"fields": ["user", "event", "ts"]}}
// after
{"fingerprint": {"fields": ["user", "event", "ts"], "ignore_missing": true}}
Defensive patterns

Strategy: validation

Validate before calling

// Default ignore_missing on fingerprint for optional fields.
{"fingerprint": {"fields": ["user", "event"], "ignore_missing": true}}

Try / catch

{"on_failure": [{"index": {"index": "ingest-dlq"}}]}

Prevention

When it happens

Trigger: A fingerprint processor configured with a list of fields, where at least one field is null or absent in the incoming document, and 'ignore_missing' omitted or false.

Common situations: Optional fields included in the fingerprint key; field renamed upstream; pipelines shared across document types where some fields are absent; schema drift dropping a field from new documents.

Related errors


AI-assisted analysis of elastic/elasticsearch@db6a809a66 (2026-08-12). Data as JSON: /api/errors/40633b2691b7bdee. Report an issue: GitHub.