2012-03-28 32 views
2

我使用hashstack和whoosh來搜索我公司的代碼,每個索引每個文件。大多數時候,它工作正常。但是,當我使用'port'這樣的常見關鍵字進行搜索時,seaching需要5分鐘才能完成,而CPU是100%。我認爲這是因爲結果數量太大(關鍵字端口5000+)。事實上,我不需要那麼多的結果,大概100左右就夠了。我如何設置限制?或超時也行。如何限制搜索結果數量或在乾草堆中設置超時時間?

回答

0

看看django's pagination - 如果你實現它,它將只顯示每頁的結果的子集,不應該使用太多的CPU。也就是說,如果你的搜索索引中有成千上萬的項目,你可能想嘗試使用另一個後端 - 我發現對於小型索引(最多約1000個項目)非常理想,但稍微慢一點。

+0

我知道Django的分頁,我用它在py應用程序。問題是,在我能顯示我的結果之前,whooh需要太多時間來查詢它們。我真正想要的是這樣的:results = foo.search(max_result_count = 100)。只要它達到第100個結果,我就想讓他回來。但現在,它繼續得到所有結果大至5000+。 – guoqiao 2012-03-29 01:42:01

+0

好的,我明白你的意思了 - 這甚至可能與Whoosh?我相信,如果您使用草垛來請求一部分結果,那麼後端可以以最有效的方式來完成。可能需要查看不同的後端 - Xapian與whoosh類似,但我認爲它會更有效地處理這種情況。 – Greg 2012-04-11 23:56:39

+0

如果您想根據後端執行此操作,您將不得不深入Haystack的邏輯,但我添加了一個簡單覆蓋默認SearchView的示例。 – 2012-12-20 15:00:27

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] 

項目的URL

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

您可以覆蓋全局中的設置:

settings.py

HAYSTACK_MAX_RESULTS = 15 
相關問題