Order by is working

This commit is contained in:
David Sauve 2009-12-04 10:27:23 -05:00
parent ae58bf85d2
commit 617f623b6b
2 changed files with 59 additions and 53 deletions

View file

@ -228,18 +228,18 @@ class XapianSearchBackendTestCase(TestCase):
# 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(self.sb.search(xapian.Query(), query_facets={'name': 'da*', {'hits': 0, 'results': []})
# results = self.sb.search(xapian.Query('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)
# self.assertEqual(len(self.xapian_search('')), 3)
#
# self.assertEqual(self.sb.search('', narrow_queries=set(['name:david1'])), {'hits': 0, 'results': []})
# results = self.sb.search('index', narrow_queries=set(['name:david1']))
# self.assertEqual(results['hits'], 1)
def test_narrow_queries(self):
self.sb.update(self.msi, self.sample_objs)
self.assertEqual(len(self.xapian_search('')), 3)
self.assertEqual(self.sb.search(xapian.Query(), narrow_queries=set([xapian.Query('XNAMEdavid1')])), {'hits': 0, 'results': []})
results = self.sb.search(xapian.Query('indexed'), narrow_queries=set([xapian.Query('XNAMEdavid1')]))
self.assertEqual(results['hits'], 1)
def test_highlight(self):
self.sb.update(self.msi, self.sample_objs)
@ -281,38 +281,38 @@ class XapianSearchBackendTestCase(TestCase):
self.assertEqual(results['hits'], 2)
self.assertEqual([result.pk for result in results['results']], [3, 2])
# def test_order_by(self):
# self.sb.update(self.msi, self.sample_objs)
#
# results = self.sb.search('*', sort_by=['pub_date'])
# self.assertEqual([result.pk for result in results['results']], [3, 2, 1])
#
# results = self.sb.search('*', sort_by=['-pub_date'])
# self.assertEqual([result.pk for result in results['results']], [1, 2, 3])
#
# results = self.sb.search('*', sort_by=['id'])
# self.assertEqual([result.pk for result in results['results']], [1, 2, 3])
#
# results = self.sb.search('*', sort_by=['-id'])
# self.assertEqual([result.pk for result in results['results']], [3, 2, 1])
#
# results = self.sb.search('*', sort_by=['value'])
# self.assertEqual([result.pk for result in results['results']], [1, 2, 3])
#
# results = self.sb.search('*', sort_by=['-value'])
# self.assertEqual([result.pk for result in results['results']], [3, 2, 1])
#
# results = self.sb.search('*', sort_by=['popularity'])
# self.assertEqual([result.pk for result in results['results']], [2, 1, 3])
#
# results = self.sb.search('*', sort_by=['-popularity'])
# self.assertEqual([result.pk for result in results['results']], [3, 1, 2])
#
# results = self.sb.search('*', sort_by=['flag', 'id'])
# self.assertEqual([result.pk for result in results['results']], [2, 1, 3])
#
# results = self.sb.search('*', sort_by=['flag', '-id'])
# self.assertEqual([result.pk for result in results['results']], [2, 3, 1])
def test_order_by(self):
self.sb.update(self.msi, self.sample_objs)
results = self.sb.search(xapian.Query(''), sort_by=['pub_date'])
self.assertEqual([result.pk for result in results['results']], [3, 2, 1])
results = self.sb.search(xapian.Query(''), sort_by=['-pub_date'])
self.assertEqual([result.pk for result in results['results']], [1, 2, 3])
results = self.sb.search(xapian.Query(''), sort_by=['id'])
self.assertEqual([result.pk for result in results['results']], [1, 2, 3])
results = self.sb.search(xapian.Query(''), sort_by=['-id'])
self.assertEqual([result.pk for result in results['results']], [3, 2, 1])
results = self.sb.search(xapian.Query(''), sort_by=['value'])
self.assertEqual([result.pk for result in results['results']], [1, 2, 3])
results = self.sb.search(xapian.Query(''), sort_by=['-value'])
self.assertEqual([result.pk for result in results['results']], [3, 2, 1])
results = self.sb.search(xapian.Query(''), sort_by=['popularity'])
self.assertEqual([result.pk for result in results['results']], [2, 1, 3])
results = self.sb.search(xapian.Query(''), sort_by=['-popularity'])
self.assertEqual([result.pk for result in results['results']], [3, 1, 2])
results = self.sb.search(xapian.Query(''), sort_by=['flag', 'id'])
self.assertEqual([result.pk for result in results['results']], [2, 1, 3])
results = self.sb.search(xapian.Query(''), sort_by=['flag', '-id'])
self.assertEqual([result.pk for result in results['results']], [2, 3, 1])
# def test_boost(self):
# self.sb.update(self.msi, self.sample_objs)

View file

@ -253,17 +253,6 @@ class SearchBackend(BaseSearchBackend):
'hits': 0,
}
# if limit_to_registered_models:
# if narrow_queries is None:
# narrow_queries = set()
#
# registered_models = self.build_registered_models_list()
#
# if len(registered_models) > 0:
# narrow_queries.add(
# ' '.join(['django_ct:%s' % model for model in registered_models])
# )
database = self._database()
if getattr(settings, 'HAYSTACK_INCLUDE_SPELLING', False) is True:
@ -271,6 +260,24 @@ class SearchBackend(BaseSearchBackend):
else:
spelling_suggestion = ''
if narrow_queries is not None:
query = xapian.Query(
xapian.Query.OP_AND, query, xapian.Query(xapian.Query.OP_OR, list(narrow_queries))
)
if limit_to_registered_models:
registered_models = self.build_registered_models_list()
if len(registered_models) > 0:
query = xapian.Query(
xapian.Query.OP_AND, query,
xapian.Query(
xapian.Query.OP_OR, [
xapian.Query('%s%s' % (DOCUMENT_CT_TERM_PREFIX, model)) for model in registered_models
]
)
)
enquire = xapian.Enquire(database)
enquire.set_query(query)
@ -378,7 +385,6 @@ class SearchBackend(BaseSearchBackend):
query = xapian.Query(
xapian.Query.OP_AND_NOT, [query, DOCUMENT_ID_TERM_PREFIX + get_identifier(model_instance)]
)
narrow_queries = []
if limit_to_registered_models:
registered_models = self.build_registered_models_list()