Added term boosting

This commit is contained in:
David Sauve 2009-11-29 16:05:36 -05:00
parent e9f2064454
commit 3cacb54cf5
2 changed files with 20 additions and 7 deletions

View File

@ -76,11 +76,11 @@ class XapianSearchQueryTestCase(TestCase):
self.sq.add_filter(SQ(content='hello world'))
self.assertEqual(self.sq.build_query().get_description(), 'Xapian::Query(hello world)')
# def test_build_query_boost(self):
# self.sq.add_filter(SQ(content='hello'))
# self.sq.add_boost('world', 5)
# self.assertEqual(self.sq.build_query().get_description(), 'Xapian::Query(hello world)')
#
def test_build_query_boost(self):
self.sq.add_filter(SQ(content='hello'))
self.sq.add_boost('world', 5)
self.assertEqual(self.sq.build_query().get_description(), 'Xapian::Query((hello OR 5 * world))')
# def test_build_query_multiple_filter_types(self):
# self.sq.add_filter('content', 'why')
# self.sq.add_filter('pub_date__lte', datetime.datetime(2009, 2, 10, 1, 59))

View File

@ -911,9 +911,22 @@ class SearchQuery(BaseSearchQuery):
def build_query(self):
if not self.query_filter:
return xapian.Query('')
query = xapian.Query('')
else:
return self._query_from_search_node(self.query_filter)
query = self._query_from_search_node(self.query_filter)
if self.boost:
subqueries = [
xapian.Query(
xapian.Query.OP_SCALE_WEIGHT, xapian.Query(term), value
) for term, value in self.boost.iteritems()
]
query = xapian.Query(
xapian.Query.OP_OR, query,
xapian.Query(xapian.Query.OP_AND, subqueries)
)
return query
def _query_from_search_node(self, search_node, is_not=False):
query_list = []