2013-10-14 105 views
0

我正在嘗試將Haystack中的搜索結果分組。我希望他們按照模型(藝術家或繪畫)分組,然後通過日期字段(創建),然後理想地由布爾字段(出售)分組。如何在Django中對Haystack搜索結果進行分組

I.e.像下面的東西,但它不工作。我認爲我需要重寫SearchView並以某種方式處理查詢,然後交給模板,但我不知道如何。

或者我應該只是在模板中進行分組?

def get_queryset(): 
    q = SearchQuerySet().filter(display=True).order_by('-created') 

    paintings_unsold = q.models(Painting).filter(sold=False) 
    paintings_sold = q.models(Painting).filter(sold=True) 
    artists = q.models(Artist) 

    return paintings_unsold | paintings_sold | artists 


urlpatterns += patterns(
    '', 
    (r'^search/', SearchView(
     searchqueryset=get_queryset() 
    )) 
) 
+0

不確定你的意思是「group by」。一個searchview結果集是一個項目列表。也許你的意思是'方面'? – Hamish

+0

我想我的意思是,不是按照相關順序(我認爲它們是默認情況下)返回搜索結果,而是希望通過基礎模型類型返回它們,然後通過該模型的布爾屬性返回它們。 – eggbert

+0

仍不確定你的意思。您正在討論*排序順序*,這與分組完全不同。 – Hamish

回答

0

只是爲了闡明小平面不等於分組結果。例如,SOLR可以執行此操作(版本4):https://cwiki.apache.org/confluence/display/solr/Result+Grouping

但您實際要求的是小面,如在評論中提到:

http://django-haystack.readthedocs.org/en/v2.4.0/faceting.html https://cwiki.apache.org/confluence/display/solr/Faceting

我將爲SOLR答案,甚至認爲該問題是標記嗖。它可能仍然有幫助。


你想刻面場上sold和現場artist_exact,你可能需要創建。它必須是string類型,否則你的方面看起來很奇怪。

因此,您當前的artist字段可能(推薦)以某種方式標記輸入的文本字段。只需在schema.xml中添加一個沒有標記的新字段和一個將藝術家複製到這個新字段的複製指令。

<field name="artist" type="text_general" indexed="true" stored="true"/> 
<field name="artist_exact" type="string" indexed="true" stored="false"/> 
<copyField source="artist" dest="artist_exact" /> 

solrconfig.xml以下參數添加到您的搜索處理機:

<str name="facet">on</str> 
<str name="facet.field">sold</str> 
<str name="facet.field">artist_exact</str> 

草堆提供了可使用FacetedSearchView。它會將方面信息添加到模板上下文中。

相關問題