mirror of
https://github.com/Hopiu/xapian-haystack.git
synced 2026-05-01 20:14:57 +00:00
Small refactor to make 'exact'more DRY
This commit is contained in:
parent
99de351c79
commit
2065ecee7f
2 changed files with 26 additions and 21 deletions
|
|
@ -125,6 +125,11 @@ class XapianSearchQueryTestCase(TestCase):
|
|||
self.sq.add_filter(SQ(title__in=["A Famous Paper", "An Infamous Article"]))
|
||||
self.assertEqual(self.sq.build_query().get_description(), 'Xapian::Query((why AND (XTITLEa famous paper OR XTITLEan infamous article)))')
|
||||
|
||||
# def test_build_query_not_in_filter_multiple_words(self):
|
||||
# self.sq.add_filter(SQ(content='why'))
|
||||
# self.sq.add_filter(~SQ(title__in=["A Famous Paper", "An Infamous Article"]))
|
||||
# self.assertEqual(self.sq.build_query().get_description(), 'Xapian::Query((why AND_NOT (XTITLEa famous paper OR XTITLEan infamous article)))')
|
||||
|
||||
# def test_build_query_in_filter_datetime(self):
|
||||
# self.sq.add_filter(SQ(content='why'))
|
||||
# self.sq.add_filter(SQ(pub_date__in=[datetime.datetime(2009, 7, 6, 1, 56, 21)]))
|
||||
|
|
|
|||
|
|
@ -962,33 +962,25 @@ class SearchQuery(BaseSearchQuery):
|
|||
else:
|
||||
if filter_type == 'exact':
|
||||
if ' ' in value:
|
||||
phrase_query = xapian.Query(
|
||||
xapian.Query.OP_PHRASE, [
|
||||
'%s%s%s' % (
|
||||
DOCUMENT_CUSTOM_TERM_PREFIX,
|
||||
field.upper(), _marshal_value(term)
|
||||
) for term in value.split()
|
||||
]
|
||||
)
|
||||
|
||||
if is_not:
|
||||
query_list.append(
|
||||
xapian.Query(
|
||||
xapian.Query.OP_AND_NOT,
|
||||
xapian.Query(''),
|
||||
xapian.Query(
|
||||
xapian.Query.OP_PHRASE, [
|
||||
'%s%s%s' % (
|
||||
DOCUMENT_CUSTOM_TERM_PREFIX,
|
||||
field.upper(),
|
||||
_marshal_value(term)
|
||||
) for term in value.split()
|
||||
]
|
||||
)
|
||||
phrase_query
|
||||
)
|
||||
)
|
||||
else:
|
||||
query_list.append(
|
||||
xapian.Query(
|
||||
xapian.Query.OP_PHRASE, [
|
||||
'%s%s%s' % (
|
||||
DOCUMENT_CUSTOM_TERM_PREFIX,
|
||||
field.upper(), value
|
||||
) for term in value.split()
|
||||
]
|
||||
)
|
||||
)
|
||||
query_list.append(phrase_query)
|
||||
else:
|
||||
if is_not:
|
||||
query_list.append(
|
||||
|
|
@ -1021,10 +1013,18 @@ class SearchQuery(BaseSearchQuery):
|
|||
elif filter_type == 'in':
|
||||
query_list.append(
|
||||
xapian.Query(
|
||||
xapian.Query.OP_OR, [xapian.Query('%s%s%s' % (DOCUMENT_CUSTOM_TERM_PREFIX, field.upper(), _marshal_value(possible_value))) for possible_value in value]
|
||||
xapian.Query.OP_OR, [
|
||||
xapian.Query(
|
||||
'%s%s%s' % (
|
||||
DOCUMENT_CUSTOM_TERM_PREFIX,
|
||||
field.upper(),
|
||||
_marshal_value(possible_value)
|
||||
)
|
||||
) for possible_value in value
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
if search_node.connector == 'OR':
|
||||
return xapian.Query(xapian.Query.OP_OR, query_list)
|
||||
|
|
|
|||
Loading…
Reference in a new issue