Remove Filter query class

This commit is contained in:
Karl Hobley 2018-06-08 14:32:11 +01:00
parent ea7237ec9f
commit 70cee5e195
3 changed files with 2 additions and 97 deletions

View file

@ -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)

View file

@ -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

View file

@ -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]