kopia lustrzana https://github.com/wagtail/wagtail
Remove Filter query class
rodzic
88d5a8cfee
commit
a1c96ac23b
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]
|
||||
|
|
Ładowanie…
Reference in New Issue