0
我使用whoosh作爲搜索後端。爲什麼使用django haystack slice queryset太慢?
,當我得到的只是3個搜索結果,代碼:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys sys.path.append('/home/guomeng/projects/tapplex_ringtones') import os os.environ['DJANGO_SETTINGS_MODULE'] = "tapplex_ringtones.settings" from haystack.query import SearchQuerySet from ringtones.models import Ringtone import time query_word = u'sky' t0 = time.time() sqs = SearchQuerySet().models(Ringtone).filter(content=query_word)[:3] t1 = time.time() print sqs print t1 - t0
結果是:
[<SearchResult: ringtones.ringtone (pk=u'1730')>, <SearchResult: ringtones.ringtone (pk=u'28959')>, <SearchResult: ringtones.ringtone (pk=u'25889')>]
0.422543048859> 0.422543048859
當我得到的所有搜索結果,代碼:
#!/usr/bin/python # -*- coding: utf-8 -*- import sys sys.path.append('/home/guomeng/projects/tapplex_ringtones') import os os.environ['DJANGO_SETTINGS_MODULE'] = "tapplex_ringtones.settings" from haystack.query import SearchQuerySet from ringtones.models import Ringtone import time query_word = u'sky' t0 = time.time() sqs = SearchQuerySet().models(Ringtone).filter(content=query_word) t1 = time.time() print sqs print t1 - t0
結果是:
[<SearchResult: ringtones.ringtone (pk=u'1730')>, <SearchResult: ringtones.ringtone (pk=u'28959')>, <SearchResult: ringtones.ringtone (pk=u'25889')>, <SearchResult: ringtones.ringtone (pk=u'5303')>, <SearchResult: ringtones.ringtone (pk=u'5335')>, <SearchResult: ringtones.ringtone (pk=u'5411')>, <SearchResult: ringtones.ringtone (pk=u'1212')>, <SearchResult: ringtones.ringtone (pk=u'28473')>, <SearchResult: ringtones.ringtone (pk=u'23867')>, <SearchResult: ringtones.ringtone (pk=u'27087')>, <SearchResult: ringtones.ringtone (pk=u'26849')>, <SearchResult: ringtones.ringtone (pk=u'2973')>, <SearchResult: ringtones.ringtone (pk=u'2645')>, <SearchResult: ringtones.ringtone (pk=u'31007')>, <SearchResult: ringtones.ringtone (pk=u'11637')>, <SearchResult: ringtones.ringtone (pk=u'16957')>, <SearchResult: ringtones.ringtone (pk=u'106')>, <SearchResult: ringtones.ringtone (pk=u'2481')>, <SearchResult: ringtones.ringtone (pk=u'15697')>]
0.19460105896
爲什麼我得到的所有結果是快?
我是不熟悉haystack,但嘗試使用'from timeit import default_timer as timer''start = timer()''end = timer()'print(end-start)'並打印查詢,而不是結果print(sqs.query )'並且在這裏發佈查詢 – madzohan 2014-11-24 10:38:57
,實際上如果你同時打印兩個查詢 - 你會發現在第二種情況下Django添加了'LIMIT'和'OFFSET'子句https://docs.djangoproject.com/zh/dev/topics/db/queries /#limits-querysets,http://stackoverflow.com/questions/4481388/why-does-mysql-higher-limit-offset-slow-the-query-down – madzohan 2014-11-24 10:53:50