2011-08-01 10 views
2

データをドリルダウンするためのファセットオプションで表示される検索結果があります。ファセットが選択されると、ファセットの結果が変更されます。だから、最初に「場所(10)」、「画像(5)」、「人(3)」、「すべて(18)」をファセットオプションとして表示していて、画像をクリックすると、検索結果が変更されたにもかかわらず他のもの。これを行う良い方法はありますか?ファセットで干し草検索結果をドリルダウンしますが、ファセット結果は変更しません

+1

はおそらく可能であるように答えを変更することを検討するべきです。 –

答えて

1

私もこの問題に遭遇しました。唯一の答えは、ドリルダウンなしで毎回クエリを再実行して最上位のファセット結果を取得することでした。

+0

私はこれを恐れていた – asawilliams

+0

いつも道があります:http://piran.com.au/2011/10/django-haystack-how-to-keep-the-original-facet-counts-when-drilling -down/ – Rich

7

私はこれをやっただけで、元の検索クエリを再実行することなく実際には達成可能です。オリジナルのファセットを保存するためにセッションを使用するだけです。その後、代わりにFacetedSearchViewのurls.pyにmysearch.StickyFacetedSearchViewを使用し、

from haystack.views import FacetedSearchView 

class StickyFacetedSearchView (FacetedSearchView): 

    def top_level_facets(self): 
     """ 
     When selecting a facet to drill down the results, 
     we need to keep the top level facet counts 
     """ 
     stored_query = self.request.session.get('query', None) 

     if stored_query != self.query: 
      self.request.session['query'] = self.query 
      self.request.session['facet_counts'] = self.results.facet_counts() 

     return self.request.session['facet_counts'] # Fail loudly 

    def extra_context(self): 
     """ add base_facets to extra_context""" 
     extra = super(StickyFacetedSearchView, self).extra_context() 
     extra['base_facets'] = self.top_level_facets() 
     return extra 

スティック「mysearch」または類似のと呼ばれるアプリで上記ビュー:

は、ここに私の実際の作業コードです。

これらにアクセスするには、ファセットではなくテンプレートのbase_facetsを使用します。

これは完全に機能します。

+0

ファセットでいくつかのレベルをドリルダウンしてもこれは機能しますか? –

+0

Nathan、yes base_facetsは常にベースクエリの元のファセットカウントです。 – Rich

+4

ユーザーが2つのタブを開き、それぞれに異なる検索を行う場合、これは機能しますか? –