From 70cee5e195fb847c6934ee5c1f65a8f5785ed8f1 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 8 Jun 2018 14:32:11 +0100 Subject: [PATCH] Remove Filter query class --- wagtail/search/backends/elasticsearch2.py | 16 +----- wagtail/search/query.py | 21 -------- wagtail/search/tests/test_backends.py | 62 +---------------------- 3 files changed, 2 insertions(+), 97 deletions(-) diff --git a/wagtail/search/backends/elasticsearch2.py b/wagtail/search/backends/elasticsearch2.py index 11b624f77..e8b19a4c1 100644 --- a/wagtail/search/backends/elasticsearch2.py +++ b/wagtail/search/backends/elasticsearch2.py @@ -14,7 +14,7 @@ from wagtail.search.backends.base import ( BaseSearchBackend, BaseSearchQueryCompiler, BaseSearchResults) from wagtail.search.index import FilterField, Indexed, RelatedFields, SearchField, class_is_indexed from wagtail.search.query import ( - And, Boost, Filter, Fuzzy, MatchAll, Not, Or, PlainText, Prefix, Term) + And, Boost, Fuzzy, MatchAll, Not, Or, PlainText, Prefix, Term) from wagtail.utils.deprecation import RemovedInWagtail22Warning from wagtail.utils.utils import deep_update @@ -466,20 +466,6 @@ class Elasticsearch2SearchQueryCompiler(BaseSearchQueryCompiler): elif isinstance(query, PlainText): return self._compile_plaintext_query(self.query, [field], boost) - elif isinstance(query, Filter): - bool_query = { - 'must': self._compile_query(query.query, field, boost), - } - - if query.include: - bool_query['filter'] = self._compile_query(query.include, field, 0.0) - - if query.exclude: - bool_query['mustNot'] = self._compile_query(query.exclude, field, 0.0) - - return { - 'bool': bool_query, - } elif isinstance(query, Boost): return self._compile_query(query.subquery, field, boost * query.boost) diff --git a/wagtail/search/query.py b/wagtail/search/query.py index 9a159d553..a6c53a6b2 100644 --- a/wagtail/search/query.py +++ b/wagtail/search/query.py @@ -153,27 +153,6 @@ class PlainText(SearchQueryShortcut): for term in self.query_string.split()]) -class Filter(SearchQueryShortcut): - def __init__(self, query: SearchQuery, - include: SearchQuery = None, exclude: SearchQuery = None): - self.query = query - self.include = include - self.exclude = exclude - - def apply(self, func): - return func(self.__class__( - self.query.apply(func), - self.include.apply(func), self.exclude.apply(func))) - - def get_equivalent(self): - query = self.query - if self.include is not None: - query &= Boost(self.include, 0) - if self.exclude is not None: - query &= Boost(~self.exclude, 0) - return query - - class Boost(SearchQueryShortcut): def __init__(self, subquery: SearchQuery, boost: float): self.subquery = subquery diff --git a/wagtail/search/tests/test_backends.py b/wagtail/search/tests/test_backends.py index e5181ead8..be4147817 100644 --- a/wagtail/search/tests/test_backends.py +++ b/wagtail/search/tests/test_backends.py @@ -13,7 +13,7 @@ from wagtail.search.backends import ( InvalidSearchBackendError, get_search_backend, get_search_backends) from wagtail.search.backends.base import FieldError from wagtail.search.backends.db import DatabaseSearchBackend -from wagtail.search.query import MATCH_ALL, And, Boost, Filter, Not, Or, PlainText, Prefix, Term +from wagtail.search.query import MATCH_ALL, And, Boost, Not, Or, PlainText, Prefix, Term from wagtail.tests.search import models from wagtail.tests.utils import WagtailTestUtils @@ -598,66 +598,6 @@ class BackendTests(WagtailTestUtils): self.backend.search('Guide', models.Book.objects.all(), operator='xor') - def test_filter_equivalent(self): - filter = Filter(Term('javascript')) - term = filter.child - self.assertIsInstance(term, Term) - self.assertEqual(term.term, 'javascript') - - filter = Filter(Term('javascript'), include=Term('definitive')) - and_obj = filter.child - self.assertIsInstance(and_obj, And) - javascript = and_obj.children[0] - self.assertIsInstance(javascript, Term) - self.assertEqual(javascript.term, 'javascript') - boost_obj = and_obj.children[1] - self.assertIsInstance(boost_obj, Boost) - self.assertEqual(boost_obj.boost, 0) - definitive = boost_obj.child - self.assertIsInstance(definitive, Term) - self.assertEqual(definitive.term, 'definitive') - - filter = Filter(Term('javascript'), - include=Term('definitive'), exclude=Term('guide')) - and_obj1 = filter.child - self.assertIsInstance(and_obj1, And) - and_obj2 = and_obj1.children[0] - javascript = and_obj2.children[0] - self.assertIsInstance(javascript, Term) - self.assertEqual(javascript.term, 'javascript') - boost_obj = and_obj2.children[1] - self.assertIsInstance(boost_obj, Boost) - self.assertEqual(boost_obj.boost, 0) - definitive = boost_obj.child - self.assertIsInstance(definitive, Term) - self.assertEqual(definitive.term, 'definitive') - boost_obj = and_obj1.children[1] - self.assertIsInstance(boost_obj, Boost) - self.assertEqual(boost_obj.boost, 0) - not_obj = boost_obj.child - self.assertIsInstance(not_obj, Not) - guide = not_obj.child - self.assertEqual(guide.term, 'guide') - - def test_filter_query(self): - results = self.backend.search(Filter(Term('javascript')), - models.Book.objects.all()) - self.assertSetEqual({r.title for r in results}, - {'JavaScript: The Definitive Guide', - 'JavaScript: The good parts'}) - - results = self.backend.search(Filter(Term('javascript'), - include=Term('definitive')), - models.Book.objects.all()) - self.assertSetEqual({r.title for r in results}, - {'JavaScript: The Definitive Guide'}) - - results = self.backend.search(Filter(Term('javascript'), - include=Term('definitive'), - exclude=Term('guide')), - models.Book.objects.all()) - self.assertSetEqual({r.title for r in results}, set()) - def test_boost_equivalent(self): boost = Boost(Term('guide'), 5) equivalent = boost.children[0]