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/main/java/org/elasticsearch/common/Rounding.java
@Override
            public long round(long originalUtcMillis) {
                /*
                 * We give up after 5000 attempts and throw an exception. The
                 * most attempts I could get running locally are 500 - for
                 * Asia/Tehran with an 80,000 day range. You just can't declare
                 * ranges much larger than that in ES right now.
                 */
                return round(originalUtcMillis, 5000);
            }
            long round(long originalUtcMillis, int maxAttempts) {
                long utcMillis = originalUtcMillis;
                int attempts = 0;
                attempt: while (attempts < maxAttempts) {
                    final Instant utcInstant = Instant.ofEpochMilli(utcMillis);
                    final LocalDateTime rawLocalDateTime = LocalDateTime.ofInstant(utcInstant, timeZone);
                    
                    final long localMillis = utcMillis + timeZone.getRules().getOffset(utcInstant).getTotalSeconds() * 1000;
                    assert localMillis == rawLocalDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();
                    final long roundedMillis = roundKey(localMillis, interval) * interval;
                    final LocalDateTime roundedLocalDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(roundedMillis), ZoneOffset.UTC);
                    
                    final List<ZoneOffset> currentOffsets = timeZone.getRules().getValidOffsets(roundedLocalDateTime);
                    if (currentOffsets.isEmpty() == false) {