2017-01-28 3 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을 사용하여 양식 미리 정의 된 범주 만 선택할 수도 있습니다.