Fix __isnull=True lookup for Elasticsearch 5

This commit is contained in:
Karl Hobley 2017-10-20 10:40:00 +01:00
parent 4b96f5eba3
commit 447f163d2e
2 changed files with 23 additions and 2 deletions

View file

@ -18,6 +18,27 @@ class Elasticsearch5Index(Elasticsearch2Index):
class Elasticsearch5SearchQuery(Elasticsearch2SearchQuery):
mapping_class = Elasticsearch5Mapping
def _process_lookup(self, field, lookup, value):
column_name = self.mapping.get_field_column_name(field)
if lookup == 'isnull':
query = {
'exists': {
'field': column_name,
}
}
if value:
query = {
'bool': {
'mustNot': query
}
}
return query
return super(Elasticsearch5SearchQuery, self)._process_lookup(field, lookup, value)
def _connect_filters(self, filters, connector, negated):
if filters:
if len(filters) == 1:

View file

@ -410,7 +410,7 @@ class TestElasticsearch5SearchQuery(TestCase):
# Check it
expected_result = {'bool': {'filter': [
{'match': {'content_type': 'searchtests.SearchTest'}},
{'missing': {'field': 'title_filter'}}
{'bool': {'mustNot': {'exists': {'field': 'title_filter'}}}}
], 'must': {'multi_match': {'query': 'Hello', 'fields': ['_all', '_partials']}}}}
self.assertDictEqual(query.get_query(), expected_result)
@ -421,7 +421,7 @@ class TestElasticsearch5SearchQuery(TestCase):
# Check it
expected_result = {'bool': {'filter': [
{'match': {'content_type': 'searchtests.SearchTest'}},
{'missing': {'field': 'title_filter'}}
{'bool': {'mustNot': {'exists': {'field': 'title_filter'}}}}
], 'must': {'multi_match': {'query': 'Hello', 'fields': ['_all', '_partials']}}}}
self.assertDictEqual(query.get_query(), expected_result)