【问题标题】:Search within a single model with Django Haystack使用 Django Haystack 在单个模型中搜索
【发布时间】:2012-10-23 20:04:23
【问题描述】:

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

然后我有一个主要的书籍页面,我只想在其中搜索 Books 模型。

我发现了这个帖子: 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)

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

【问题讨论】:

  • 这仍然不适合我,但我找到了一个临时解决方案,方法是使用“SearchQuerySet”类来处理搜索,然后通过检查查询集中的项目是否具有属性来缩小结果范围我班独有。这并不理想,但同时会起作用。记录的功能似乎仍然不起作用。
  • 您使用的是什么版本的 haystack?什么搜索后端?

标签: django search django-haystack


【解决方案1】:

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

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

【讨论】:

  • 您的本地测试解决方案是什么?您是否添加了检查以检测后端以触发警报等?
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多