added ordering support for text queries
This commit is contained in:
parent
89825a2b21
commit
30c01089f5
@ -43,5 +43,7 @@ Next, start a text search using :attr:`QuerySet.search_text` method::
|
|||||||
document.title # may be: "MongoEngine 0.9 released"
|
document.title # may be: "MongoEngine 0.9 released"
|
||||||
|
|
||||||
|
|
||||||
|
Ordering by text score
|
||||||
|
======================
|
||||||
|
|
||||||
|
objects = News.objects.search('mongo').order_by('$text_score')
|
||||||
|
@ -1549,6 +1549,13 @@ class BaseQuerySet(object):
|
|||||||
for key in keys:
|
for key in keys:
|
||||||
if not key:
|
if not key:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if key == '$text_score':
|
||||||
|
# automatically set to include text scores
|
||||||
|
self._include_text_scores = True
|
||||||
|
key_list.append(('text_score', {'$meta': "textScore"}))
|
||||||
|
continue
|
||||||
|
|
||||||
direction = pymongo.ASCENDING
|
direction = pymongo.ASCENDING
|
||||||
if key[0] == '-':
|
if key[0] == '-':
|
||||||
direction = pymongo.DESCENDING
|
direction = pymongo.DESCENDING
|
||||||
|
@ -2791,6 +2791,28 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertTrue(isinstance(new.text_score, float))
|
self.assertTrue(isinstance(new.text_score, float))
|
||||||
|
|
||||||
|
# count
|
||||||
|
query = News.objects.search_text('brasil').order_by('$text_score')
|
||||||
|
self.assertTrue(query._include_text_scores)
|
||||||
|
|
||||||
|
self.assertEqual(query.count(), 3)
|
||||||
|
self.assertEqual(query._query, {'$text': {'$search': 'brasil'}})
|
||||||
|
cursor_args = query._cursor_args
|
||||||
|
self.assertEqual(
|
||||||
|
cursor_args['fields'], {'text_score': {'$meta': 'textScore'}})
|
||||||
|
|
||||||
|
text_scores = [i.text_score for i in query]
|
||||||
|
self.assertEqual(len(text_scores), 3)
|
||||||
|
|
||||||
|
self.assertTrue(text_scores[0] > text_scores[1])
|
||||||
|
self.assertTrue(text_scores[1] > text_scores[2])
|
||||||
|
max_text_score = text_scores[0]
|
||||||
|
|
||||||
|
# get item
|
||||||
|
item = News.objects.search_text(
|
||||||
|
'brasil').order_by('$text_score').first()
|
||||||
|
self.assertEqual(item.text_score, max_text_score)
|
||||||
|
|
||||||
@skip_older_mongodb
|
@skip_older_mongodb
|
||||||
def test_distinct_handles_references_to_alias(self):
|
def test_distinct_handles_references_to_alias(self):
|
||||||
register_connection('testdb', 'mongoenginetest2')
|
register_connection('testdb', 'mongoenginetest2')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user