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
for (InternalFilters.InternalBucket filter : response.getBuckets()) {
            assertEquals(filter.getDocCount(), 0);
        }
        assertFalse(AggregationInspectionHelper.hasValue(response));
        indexReader.close();
        directory.close();
    }
    public void testBuildEmpty() throws IOException {
        int numFilters = randomIntBetween(1, 10);
        QueryBuilder[] filters = new QueryBuilder[numFilters];
        for (int i = 0; i < filters.length; i++) {
            filters[i] = QueryBuilders.termQuery("field", randomAlphaOfLength(5));
        }
        FiltersAggregationBuilder builder = new FiltersAggregationBuilder("test", filters);
        boolean askForOtherBucket = true;
        if (askForOtherBucket) {
            builder.otherBucket(true).otherBucketKey("other");
        }
        withAggregator(builder, new MatchAllDocsQuery(), iw -> {}, (searcher, aggregator) -> {
            InternalFilters result = (InternalFilters) aggregator.buildEmptyAggregation();
            for (int i = 0; i < filters.length; i++) {
                assertThat(result.getBucketByKey(String.valueOf(i)).getDocCount(), equalTo(0L));
            }
            if (askForOtherBucket) {
                assertThat(result.getBucketByKey("other").getDocCount(), equalTo(0L));
            } else {
                assertThat(result.getBucketByKey("other"), nullValue());
            }
        });
    }