Skip to content

Commit

Permalink
Inverse of an empty Bool() should be MatchNone()
Browse files Browse the repository at this point in the history
  • Loading branch information
sethmlarson committed Dec 2, 2020
1 parent 99b787c commit f856f5d
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
5 changes: 5 additions & 0 deletions elasticsearch_dsl/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,11 @@ def _min_should_match(self):
)

def __invert__(self):
# Because an empty Bool query is treated like
# MatchAll the inverse should be MatchNone
if not any(chain(self.must, self.filter, self.should, self.must_not)):
return MatchNone()

negations = []
for q in chain(self.must, self.filter):
negations.append(~q)
Expand Down
6 changes: 6 additions & 0 deletions tests/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,12 @@ def test_not_match_none_is_match_all():
assert ~q == query.MatchAll()


def test_invert_empty_bool_is_match_none():
q = query.Bool()

assert ~q == query.MatchNone()


def test_match_none_or_query_equals_query():
q1 = query.Match(f=42)
q2 = query.MatchNone()
Expand Down

0 comments on commit f856f5d

Please sign in to comment.