我有一个显示分页搜索结果的Django应用程序。每个页面显示20个结果,我在底部有一个分页栏,显示比当前页面少5页和5页的页面(如谷歌)。问题是,对于分页栏我调用count()来获得结果总数,所以我知道当前页面前面是否有5页结果。
问题是更常见的查询可能需要大约10秒才能执行count()
。我实际上并不关心确切的数字,因为我的大多数用户可能永远不会达到结果的最终结果。有没有办法估计计数的输出,或者更一般地,估计查询返回结果的数量?
这是我目前的查询以获得实际结果。
results = Item.objects.filter(title__icontains=query).order_by('views')[offset:limit]
offset
和limit
变量指的是当前页面上显示的结果段。我能看到解决问题的唯一方法是提前约5页的结果段并检查它是否为空。但是,该解决方案存在很多边缘情况,如果有更简单的解决方案,我真的不想花一天时间进行编码。
答案 0 :(得分:0)
也不是理想的解决方案,但可能值得针对您的特定情况进行测试。您可以在以下帮助下为函数引入超时:
http://code.activestate.com/recipes/576780/
......或类似的解决方案。您要么需要确切的行数,要么需要大量的信息。这需要一些基准测试才能使Timoeout正确并且仍然容易受到某些外部因素的影响,但在99.9%的情况下也可能正常工作。
它还减少了db上的长查询负载。