如何使用whoosh限制搜索结果计数或在haystack中设置超时?

时间:2012-03-28 07:49:17

标签: python django search django-haystack whoosh

我使用haystack和whoosh搜索我公司的代码,每个索引的每个文件。大多数时候,它工作正常。但是,当我使用像'port'这样的常用关键字搜索时,搜索需要5分钟才能完成,而CPU则是100%。我认为这是因为结果计数太大(关键字端口为5000+)。的确,我不需要那么多结果,也许100左右就足够了。我该如何设置限制?或者超时也没关系。

3 个答案:

答案 0 :(得分:2)

是的,你可以,默认的SearchView类及其方法没有什么特别之处。这是一个示例操作方法:

yourapp网址

# Django specific
from django.conf.urls import *

# App specific
from yourapp.search.views import AdvancedSearchView

urlpatterns = patterns('yourapp.views',
    url(r'^$', AdvancedSearchView(), name='yourapp_search'),
)

<强>视图

# Django specific
from django.conf import settings

# App specific
from haystack.views import SearchView

LIMIT = getattr(settings, 'HAYSTACK_MAX_RESULTS', 50)

class AdvancedSearchView(SearchView):
    def get_results(self):
        return self.form.search()[:LIMIT]

项目网址

urlpatterns += patterns('',
    url(r'^search/$', include('yourapp.search.urls'))
)

您可以在设置中覆盖全局:

<强> settings.py

HAYSTACK_MAX_RESULTS = 15

答案 1 :(得分:0)

看看django's pagination - 如果你实现它,它将只显示每页的结果子集,不应该使用这么多的CPU。也就是说,如果您的搜索索引中有数千个项目,您可能想尝试使用另一个后端 - 我发现小型索引(最多约1000个项目)非常理想,但有点慢了。

答案 2 :(得分:0)

也许你应该看看time limited searches。结合有限的收集器实例,您应该能够解决您的问题。