Remove Filter query class

pull/4682/head
Karl Hobley 2018-06-08 14:32:11 +01:00 zatwierdzone przez Matt Westcott
rodzic 88d5a8cfee
commit a1c96ac23b
3 zmienionych plików z 2 dodań i 98 usunięć

Wyświetl plik

@ -15,8 +15,7 @@ from wagtail.search.backends.base import (
BaseSearchBackend, BaseSearchQueryCompiler, BaseSearchResults, FilterFieldError)
from wagtail.search.index import (
AutocompleteField, FilterField, Indexed, RelatedFields, SearchField, class_is_indexed)
from wagtail.search.query import (
And, Boost, Filter, Fuzzy, MatchAll, Not, Or, PlainText, Prefix, Term)
from wagtail.search.query import And, Boost, Fuzzy, MatchAll, Not, Or, PlainText, Prefix, Term
from wagtail.utils.deprecation import RemovedInWagtail22Warning
from wagtail.utils.utils import deep_update
@ -480,20 +479,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)

Wyświetl plik

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

Wyświetl plik

@ -15,7 +15,7 @@ from wagtail.search.backends import (
InvalidSearchBackendError, get_search_backend, get_search_backends)
from wagtail.search.backends.base import FieldError, FilterFieldError
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
@ -645,66 +645,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]