Implemented query facets

This commit is contained in:
David Sauve 2009-08-11 08:42:42 -04:00
parent fdef0c5ed1
commit 1a8e6d24b6
2 changed files with 18 additions and 5 deletions

View File

@ -206,11 +206,14 @@ class XapianSearchBackendTestCase(TestCase):
('2009-02-01T00:00:00', 0)
])
# def test_query_facets(self):
# self.assertEqual(self.sb.search('', query_facets={'name': '[* TO e]'}), {'hits': 0, 'results': []})
# results = self.sb.search('index', query_facets={'name': '[* TO e]'})
# self.assertEqual(results['hits'], 3)
# self.assertEqual(results['facets'], {})
def test_query_facets(self):
self.sb.update(self.msi, self.sample_objs)
self.assertEqual(len(self.xapian_search('')), 3)
self.assertEqual(self.sb.search('', query_facets={'name': 'da*'}), {'hits': 0, 'results': []})
results = self.sb.search('index', query_facets={'name': 'da*'})
self.assertEqual(results['hits'], 3)
self.assertEqual(results['facets']['queries']['name'], ('da*', 3))
def test_narrow_queries(self):
self.sb.update(self.msi, self.sample_objs)

View File

@ -340,6 +340,8 @@ class SearchBackend(BaseSearchBackend):
if date_facets:
facets_dict['dates'] = self._do_date_facets(results, date_facets)
if query_facets:
facets_dict['queries'] = self._do_query_facets(results, query_facets)
return {
'results': results,
@ -548,6 +550,14 @@ class SearchBackend(BaseSearchBackend):
return facet_dict
def _do_query_facets(self, results, query_facets):
facet_dict = {}
for field, query in query_facets.iteritems():
facet_dict[field] = (query, self.search(query)['hits'])
return facet_dict
def _marshal_value(self, value):
"""
Private method that converts Python values to a string for Xapian values.