### 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/bucket/composite/CompositeAggregationBuilder.java
if (factory == null) {
            return null;
        } else if (factory instanceof NestedAggregatorFactory
            || factory instanceof FilterAggregatorFactory
            || factory instanceof RandomSamplerAggregatorFactory) {
                return validateParentAggregations(factory.getParent());
            } else {
                return factory;
            }
    }
    private static void validateSources(List<CompositeValuesSourceBuilder<?>> sources) {
        if (sources == null || sources.isEmpty()) {
            throw new IllegalArgumentException("Composite [" + SOURCES_FIELD_NAME.getPreferredName() + "] cannot be null or empty");
        }
        Set<String> names = new HashSet<>();
        Set<String> duplicates = new HashSet<>();
        sources.forEach(source -> {
            if (source == null) {
                throw new IllegalArgumentException("Composite source cannot be null");
            }
            boolean unique = names.add(source.name());
            if (unique == false) {
                duplicates.add(source.name());
            }
        });
        if (duplicates.size() > 0) {
            throw new IllegalArgumentException("Composite source names must be unique, found duplicates: " + duplicates);
        }
    }
    @Override