elastic/elasticsearch · error · IllegalArgumentException

[bucket_sort] only supports field based sorting; incompatibl

Error message

[bucket_sort] only supports field based sorting; incompatible sort: [{sort}]

What it means

Error "[bucket_sort] only supports field based sorting; incompatible sort: [{sort}]" thrown in elastic/elasticsearch.

Source

Thrown at modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/BucketSortPipelineAggregationBuilder.java:63

    public static final String NAME = "bucket_sort";

    private static final ParseField FROM = new ParseField("from");
    private static final ParseField SIZE = new ParseField("size");

    @SuppressWarnings("unchecked")
    public static final ConstructingObjectParser<BucketSortPipelineAggregationBuilder, String> PARSER = new ConstructingObjectParser<>(
        NAME,
        false,
        (a, context) -> new BucketSortPipelineAggregationBuilder(context, (List<FieldSortBuilder>) a[0])
    );

    static {
        PARSER.declareField(optionalConstructorArg(), (p, c) -> {
            List<SortBuilder<?>> sorts = SortBuilder.fromXContent(p);
            List<FieldSortBuilder> fieldSorts = new ArrayList<>(sorts.size());
            for (SortBuilder<?> sort : sorts) {
                if (sort instanceof FieldSortBuilder == false) {
                    throw new IllegalArgumentException(
                        "[" + NAME + "] only supports field based sorting; incompatible sort: [" + sort + "]"
                    );
                }
                fieldSorts.add((FieldSortBuilder) sort);
            }
            return fieldSorts;
        }, SearchSourceBuilder.SORT_FIELD, ObjectParser.ValueType.OBJECT_ARRAY);
        PARSER.declareInt(BucketSortPipelineAggregationBuilder::from, FROM);
        PARSER.declareInt(BucketSortPipelineAggregationBuilder::size, SIZE);
        PARSER.declareField(BucketSortPipelineAggregationBuilder::gapPolicy, p -> {
            if (p.currentToken() == XContentParser.Token.VALUE_STRING) {
                return GapPolicy.parse(p.text().toLowerCase(Locale.ROOT), p.getTokenLocation());
            }
            throw new IllegalArgumentException("Unsupported token [" + p.currentToken() + "]");
        }, GAP_POLICY, ObjectParser.ValueType.STRING);
    }

    private List<FieldSortBuilder> sorts = Collections.emptyList();

View on GitHub (pinned to db6a809a66)

When it happens

Trigger: Thrown at modules/aggregations/src/main/java/org/elasticsearch/aggregations/pipeline/BucketSortPipelineAggregationBuilder.java:63 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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