使用Django Haystack在单个模型中搜索

时间:2012-10-23 20:04:23

标签: django search django-haystack

我正在使用haystack在我的项目中进行完整的网站搜索,搜索书籍,作者,活动和视频模型。

然后我有一个主书页,我只想在图书模型中搜索。

我发现这篇文章: How to return only indexed objects of a specific type in Haystack

但它似乎对我不起作用。我正在使用简单的后端进行本地测试,我知道确实有一些问题,我不确定这是否相关。

我的search_indexes.py文件如下所示:

class BookSearchIndex (SearchIndex):
    text = CharField(document=True, use_template=True)
    title_web = CharField(model_attr='title_web', boost=1.125)
    on_sale_date = CharField(model_attr='on_sale_date')

    def index_queryset(self):
        return Book.objects.active().filter(publish_level='published')

site.register(Book, BookSearchIndex)

在我看来,如果传递了搜索查询,则仅返回包含该查询的图书,否则显示所有图书:

search = self.request.GET.get('search', None)
if search:
    clean_query = SearchQuerySet().query.clean(search)
    sqs = SearchQuerySet().models(Book).filter(content=clean_query).order_by('-on_sale_date')
else:
    sqs = SearchQuerySet().models(Book).order_by('-on_sale_date)

搜索会根据搜索查询正确过滤项目,但仍会返回所有模型。它并不仅限于Book模型。

看来这部分没有效果:

SearchQuerySet().models(Book)

任何人都可以帮我弄清楚我做错了吗?

1 个答案:

答案 0 :(得分:1)

我明白了。我试图在本地使用简单的搜索进行测试,因为我们还没有设置solr后端设置。

使用.models()函数不适用于简单的后端。