2012-10-23 60 views
4

我在我的項目中使用haystack進行全站搜索,該項目在書籍,作者,事件和視頻模型中進行搜索。使用Django Haystack在單個模型中搜索

然後,我有主要的書籍頁面,我只想對照書籍模型進行搜索。

我發現這個職位: How to return only indexed objects of a specific type in Haystack

但是它似乎並沒有爲我工作。我在本地測試使用簡單的後端,我知道這確實有一些問題,我不知道這是否相關。

我search_indexes.py文件看起來像這樣:

class BookSearchIndex (SearchIndex): 
    text = CharField(document=True, use_template=True) 
    title_web = CharField(model_attr='title_web', boost=1.125) 
    on_sale_date = CharField(model_attr='on_sale_date') 

    def index_queryset(self): 
     return Book.objects.active().filter(publish_level='published') 

site.register(Book, BookSearchIndex) 

而且在我看來,如果有一個搜索查詢傳遞,與查詢返回唯書,否則顯示所有的書:

search = self.request.GET.get('search', None) 
if search: 
    clean_query = SearchQuerySet().query.clean(search) 
    sqs = SearchQuerySet().models(Book).filter(content=clean_query).order_by('-on_sale_date') 
else: 
    sqs = SearchQuerySet().models(Book).order_by('-on_sale_date) 

搜索正確地根據搜索查詢過濾項目,但它仍然返回所有模型。它不僅限於Book模型。

看起來這部分沒有任何影響:

SearchQuerySet().models(Book) 

誰能幫我找出我做錯了嗎?

+0

這仍然不適用於我,但是我發現了一個臨時解決方案,它使用'SearchQuerySet'類來處理搜索,然後通過檢查查詢集中的項是否具有對我的類唯一的屬性來縮小搜索結果的範圍。這並不理想,但會同時工作。記錄的功能仍然不起作用。 –

+0

你在使用什麼版本的乾草堆?什麼搜索後端? –

回答

1

我想通了。我試圖在本地使用簡單的搜索測試,因爲我們還沒有solr後端設置。

使用.models()函數不適用於簡單的後端。

+0

您對本地測試的解決方案是什麼?您是否添加了支票來檢測後端以觸發警報等? –