### Elasticsearch Version

main

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

all

### Problem Description

The `filter` agg should run as `filters` because the `filters` agg has tons of optimizations, some of them are even around when running with a single filter. At a minimum we should optimize the `filter` agg in the same way as `filters`, but I think it's easier if we just run it as `filters`.

### Steps to Reproduce

see above

### Logs (if relevant)

_No response_
server/src/main/java/org/elasticsearch/search/aggregations/CardinalityUpperBound.java
return mapper.apply(0);
        }
    };
    /**
     * {@link Aggregator}s with this cardinality will collect be collected
     * once or zero times. This will only be true for top level {@linkplain Aggregator}s
     * and for sub-aggregator's who's ancestors are all single-bucket
     * aggregations like {@link FilterAggregator} or a {@link RangeAggregator}
     * configured to collect only a single range.
     */
    public static final CardinalityUpperBound ONE = new KnownCardinalityUpperBound(1);
    /**
     * {@link Aggregator}s with this cardinality may be collected many times.
     * Most sub-aggregators of {@link BucketsAggregator}s will have
     * this cardinality.
     */
    public static final CardinalityUpperBound MANY = new CardinalityUpperBound() {
        @Override
        public CardinalityUpperBound multiply(int bucketCount) {
            if (bucketCount == 0) {
                return NONE;
            }
            return MANY;
        }
        @Override
        public <R> R map(IntFunction<R> mapper) {
            return mapper.apply(Integer.MAX_VALUE);
        }
    };
    private CardinalityUpperBound() {