我正在使用带有干草堆的Django,我想知道是否可以打印搜索显示结果的时间。例如:
每次查询后我都要打印:x results in y seconds
。
干草堆真的可以吗?提前谢谢!
答案 0 :(得分:2)
默认情况下,Haystack将搜索功能包装在一个包装器中,该包装器会对搜索进行计时并输出它(请参阅source code)。但是,如果DEBUG
为True
,则仅输出信息。
您可以做的是指定一个类似的包装器,它输出时间并将其动态添加到搜索后端。请注意,您需要包装您正在使用的特定后端的方法。例如。如果您使用ElasticSearch:
from time import time
from haystack.backends.elasticsearch_backend import ElasticsearchSearchBackend
def time_wrapper(func):
def wrapper(*args, **kwargs):
start = time()
try:
return func(*args, **kwargs)
finally:
stop = time()
# time = stop - start, now output it wherever you want.
print '%.3f' % (stop - start)
return wrapper
ElasticsearchSearchBackend.search = time_wrapper(ElasticsearchSearchBackend.search)
您可以在更高级别上进行搜索,包括构建查询等所需的时间,但请记住SearchQuerySet
是懒惰的。您需要计算查询集的第一次评估时间,而不是构造。
如果要显示用户花费的时间,请考虑实际视图函数的时间(部分),并将其传递给模板上下文。