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
).entry("test.s", matchesMap()).entry("test.m", matchesMap())
                );
            },
            dateFt,
            intFt
        );
    }
    public void testDocValuesFieldExistsForDate() throws IOException {
        DateFieldMapper.DateFieldType ft = new DateFieldMapper.DateFieldType("f");
        QueryBuilder exists;
        if (randomBoolean()) {
            exists = new ExistsQueryBuilder("f");
        } else {
            
            exists = new RangeQueryBuilder("f").gte("2020-01-01").lt("2020-01-02");
        }
        long start = DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.parseMillis("2020-01-01T00:00:01");
        docValuesFieldExistsTestCase(exists, ft, true, i -> {
            long date = start + TimeUnit.HOURS.toMillis(i);
            return List.of(new LongPoint("f", date), new NumericDocValuesField("f", date));
        });
    }
    public void testDocValuesFieldExistsForDateWithMultiValuedFields() throws IOException {
        DateFieldMapper.DateFieldType ft = new DateFieldMapper.DateFieldType("f");
        long start = DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.parseMillis("2020-01-01T00:00:01");
        docValuesFieldExistsTestCase(new ExistsQueryBuilder("f"), ft, true, i -> {
            long date = start + TimeUnit.HOURS.toMillis(i);
            return List.of(
                new LongPoint("f", date),
                new LongPoint("f", date + 10),