diff --git a/elasticsearch_dsl/filter.py b/elasticsearch_dsl/filter.py
index <HASH>..<HASH> 100644
--- a/elasticsearch_dsl/filter.py
+++ b/elasticsearch_dsl/filter.py
@@ -53,4 +53,14 @@ class Bool(BoolMixin, Filter):
 # register this as Bool for Filter
 Filter._bool = Bool
 
-EMPTY_FILTER = Bool()
+class MatchAll(Filter):
+    name = 'match_all'
+    def __add__(self, other):
+        return other._clone()
+    __and__ = __rand__ = __radd__ = __add__
+
+    def __or__(self, other):
+        return self
+    __ror__ = __or__
+
+EMPTY_FILTER = MatchAll()
diff --git a/test_elasticsearch_dsl/test_search.py b/test_elasticsearch_dsl/test_search.py
index <HASH>..<HASH> 100644
--- a/test_elasticsearch_dsl/test_search.py
+++ b/test_elasticsearch_dsl/test_search.py
@@ -181,7 +181,7 @@ def test_complex_example():
             }
         },
         'post_filter': {
-            'bool': {'must': [{'terms': {'tags': ['prague', 'czech']}}]}
+            'terms': {'tags': ['prague', 'czech']}
         },
         'aggs': {
             'per_country': {
Don't wrap all filters in Bool, introduce MatchAll instead