Django 1.6,Haystack:如何打印搜索时间?

时间:2014-03-07 01:03:16

标签: django

我正在使用带有干草堆的Django,我想知道是否可以打印搜索显示结果的时间。例如: 每次查询后我都要打印:x results in y seconds

干草堆真的可以吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

默认情况下,Haystack将搜索功能包装在一个包装器中,该包装器会对搜索进行计时并输出它(请参阅source code)。但是,如果DEBUGTrue,则仅输出信息。

您可以做的是指定一个类似的包装器,它输出时间并将其动态添加到搜索后端。请注意,您需要包装您正在使用的特定后端的方法。例如。如果您使用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是懒惰的。您需要计算查询集的第一次评估时间,而不是构造。

如果要显示用户花费的时间,请考虑实际视图函数的时间(部分),并将其传递给模板上下文。