2017-01-28 36 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 

这只是一个小例子,我没有测试的代码,但它应该是关于这样的。您也可以在自定义表单中使用SelectMultipleSelect以让用户只选择表单预定义的类别。