2017-01-28 6 views
1

結果。私は文書フィールドとしてその成分を指定しました。すべてがうまくいっていますが、検索結果にさらに制約をかけたいと思っています。フィルタリングヘイスタックは、私はレシピのフルテキスト検索を構築しようとしています

は、たとえば、私は、フィールド上の食材のフルテキスト検索を実行したいが、モデルが検索対象とする場合にのみ指定されたカテゴリに一致します。

私は、ドキュメントを通して見て、設定する必要が任意のクエリパラメータを見つけることができませんでしたでも私はインデックスにしなければならないすべての変更を発見しました。

ことが重要ならば、私は、インデックス作成のために担保にelasticsearch使用しています。

class ArticleIndex(indexes.SearchIndex,indexes.Indexable): 
    text = indexes.CharField(document=True,model_attr='ingredients') 
    title = indexes.CharField(model_attr='title') 
    category = indexes.CharField(model_attr='category') 
    image_link = indexes.CharField(model_attr='image_link') 
    publication_date = indexes.DateTimeField(model_attr='publication_date') 

    def get_model(self): 
     return Article 
+0

検索リクエストを処理するビューを提供できますか?私はあなたがなぜ 'SearchQuerySet'を絞り込むことができないのか分かりません:' sqs.filter(category__exact = self.cleaned_data ['user_provided_category]) ' – trixn

答えて

0

検索を絞り込むしたい場合は、あなただけのユーザーからの追加のフィルタ情報を取得し、SearchQuerySetダウンを狭くするために、あなたのビューでその入力を使用するようにカスタムフォームを使用する必要がダウン結果。

それは次のようになります。

from django import forms 
from haystack.forms import SearchForm 
from haystack.generic_views import SearchView 


class MySearchForm(SearchForm): 
    category = forms.CharField(required=False) 

    def search(): 
     sqs = super(MySearchForm, self).search() 

     category = self.cleaned_data.get('category') 

     if category: 
      sqs = sqs.filter(category__exact=category) 

     return sqs 


class MySearchView(SearchView): 
    form_class = MySearchForm 

それはちょうど、最小限の例だと、私は、コードをテストしていないが、それはこのよう程度になります。 SelectまたはMultipleSelectをカスタムフォームに使用して、ユーザーがフォーム定義済みカテゴリのみを選択できるようにすることもできます。

関連する問題