我正在尝试为食谱构建全文搜索。我已将该成分指定为文档字段。一切正常,但我也想对搜索结果加上一些限制。
例如,我想对字段成分执行全文搜索,但希望仅搜索与指定类别匹配的模型。
我查看了文档,但无法找到任何需要设置的查询参数,也没有找到我必须对索引做的任何更改。
如果重要的话,我在支持索引的情况下使用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 :(得分: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
,以便用户只选择表单预定义类别。