elastic/elasticsearch · error · IllegalArgumentException

Sort direction [ ] not recognized. Valid values are: [asc…

Error message

Sort direction [{}] not recognized. Valid values are: [asc, desc]

What it means

Thrown by SortOrder.fromString when the sort direction string is non-null but does not match either 'asc' or 'desc'. Only those two exact values are accepted.

Solutions

  1. Use exactly 'asc' or 'desc' (lowercase) as the order value.
  2. Normalize the input to lowercase 'asc'/'desc' before passing it to the processor.
  3. Correct any typo in the order field.

Example fix

// before
{
  "sort": { "field": "events", "target_field": "events_sorted", "order": "ascending" }
}
// after
{
  "sort": { "field": "events", "target_field": "events_sorted", "order": "asc" }
}
Defensive patterns

Strategy: validation

Validate before calling

// Normalize and validate order before use
String order = config.get("order");
if (order != null) order = order.toLowerCase(Locale.ROOT);
if ("asc".equals(order) || "desc".equals(order) == false) {
    order = "asc"; // or reject
}

Type guard

boolean isValidSortOrder(String order) {
    return "asc".equals(order) || "desc".equals(order);
}

Try / catch

try {
    SortOrder.fromString(order);
} catch (IllegalArgumentException e) {
    if (e.getMessage().contains("not recognized")) {
        // correct to 'asc' or 'desc'
    } else { throw e; }
}

Prevention

When it happens

Trigger: Configuring the sort processor with an order value other than 'asc' or 'desc' (e.g., 'ascending', 'descending', 'ASC', 'DESC', '1', '0').

Common situations: Using verbose direction names ('ascending'/'descending') instead of short forms. Case sensitivity issues (the check is case-sensitive). Typos. Copy-paste from other tools that use different sort vocabularies.

Related errors


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

Appendix: source

Thrown at modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/SortProcessor.java:59

            this.direction = direction;
        }

        @Override
        public String toString() {
            return this.direction;
        }

        public static SortOrder fromString(String value) {
            if (value == null) {
                throw new IllegalArgumentException("Sort direction cannot be null");
            }

            if (value.equals(ASCENDING.toString())) {
                return ASCENDING;
            } else if (value.equals(DESCENDING.toString())) {
                return DESCENDING;
            }
            throw new IllegalArgumentException("Sort direction [" + value + "] not recognized." + " Valid values are: [asc, desc]");
        }
    }

    private final String field;
    private final SortOrder order;
    private final String targetField;

    SortProcessor(String tag, String description, String field, SortOrder order, String targetField) {
        super(tag, description);
        this.field = field;
        this.order = order;
        this.targetField = targetField;
    }

    String getField() {
        return field;
    }

View on GitHub (pinned to db6a809a66)