过滤干草堆结果

时间:2017-01-28 15:34:10

标签: python django elasticsearch django-haystack

我正在尝试为食谱构建全文搜索。我已将该成分指定为文档字段。一切正常,但我也想对搜索结果加上一些限制。

例如,我想对字段成分执行全文搜索,但希望仅搜索与指定类别匹配的模型。

我查看了文档,但无法找到任何需要设置的查询参数,也没有找到我必须对索引做的任何更改。

如果重要的话,我在支持索引的情况下使用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

1 个答案:

答案 0 :(得分: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,以便用户只选择表单预定义类别。