5

我正在使用 haystack 对我的项目进行完整的站点搜索,该项目在书籍、作者、事件和视频模型中进行搜索。

然后我有主要的书籍页面,我只想针对 Books 模型进行搜索。

我找到了这篇文章: 如何在 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)

谁能帮我弄清楚我做错了什么?

4

1 回答 1

1

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

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

于 2012-11-26T23:53:24.907 回答