2014-11-24 3 views
0

검색 백엔드로 whoosh를 사용합니다. 난 그냥 3 검색 결과를 얻을 수django haystack slice queryset을 너무 느리게 사용하는 이유는 무엇입니까?

코드 :

#!/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 

왜 나는 모든 결과가 빠른거야?

+0

haystack에 친숙하지 않지만'timeit import default_timer as timer '를 사용 해보자. start = timer()''end = timer()''print (end-start)'그리고 결과가 아닌 print 질의'print (sqs.query)'를 입력하고 여기에 쿼리를 – madzohan

+0

게시하고 실제로 두 쿼리를 모두 출력하면 두 번째 경우 Django가'LIMIT'과'OFFSET' 절을 추가하는 것을 볼 수 있습니다 https://docs.djangoproject.com/en/dev/topics/db/queries/# limiting-querysets, http://stackoverflow.com/questions/4481388/why-does-mysql-higher-limit-offset-slow-the-query-down – madzohan

답변

0

아마 때문에 :

SearchQuerySet().models(Ringtone).filter(content=query_word)[:3] 

합니까

SearchQuerySet().models(Ringtone).filter(content=query_word) 

않습니다뿐만 아니라, 한계 절에서 설정 한 쿼리를 업데이트하고 새로운 검색어 세트를 반환 다. 이것은 시간 차이의 전부 또는 일부를 설명 할 수 있습니다. 의미있는 결과를 얻으려면 많은 호출에 걸리는 시간을 평균화하고 내부 코드의 일부 (예 : DB가 쿼리를 처리하는 데 걸리는 시간, 실제로 쿼리 등)를 분석해야합니다.