Right now filter aggregations run in "compatible" mode if the top level query is `bool: {filter: { match_all: {}}}}` - but this really just just `match_all` in disguise. We should just run in filter-by-filter mode here.
server/src/test/java/org/elasticsearch/search/aggregations/bucket/filter/FiltersAggregatorTests.java
new LongPoint("date", DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.parseMillis("2010-01-02")),
                    new Field("kwd", "a", KeywordFieldMapper.Defaults.FIELD_TYPE),
                    new SortedDocValuesField("kwd", new BytesRef("a"))
                )
            );
            iw.addDocument(
                List.of(
                    new LongPoint("date", DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.parseMillis("2020-01-02")),
                    new Field("kwd", "a", KeywordFieldMapper.Defaults.FIELD_TYPE),
                    new SortedDocValuesField("kwd", new BytesRef("a"))
                )
            );
        }, (InternalFilters filters, Class<? extends Aggregator> impl, Map<String, Map<String, Object>> debug) -> {
            assertThat(filters.getBuckets(), hasSize(1));
            assertThat(filters.getBucketByKey("q1").getDocCount(), equalTo(1L));
            assertThat(impl, equalTo(FiltersAggregator.Compatible.class));
            assertMap(
                debug,
                matchesMap().entry(
                    "test",
                    matchesMap().entry("filters", matchesList().item(matchesMap().entry("query", "date:[1577836800000 TO 1583020799999]")))
                )
            );
        }, dft, kft);
    }
    public void testMatchNoneFilter() throws IOException {
        AggregationBuilder builder = new FiltersAggregationBuilder("test", new KeyedFilter("q1", new RangeQueryBuilder("missing").gte(0)));
        CheckedConsumer<RandomIndexWriter, IOException> buildIndex = iw -> {
            for (int i = 0; i < 10; i++) {
                iw.addDocument(List.of(new LongPoint("t", i)));