【发布时间】:2013-10-14 21:09:15
【问题描述】:
我正在尝试对来自 Haystack 的搜索结果进行分组。我希望它们按模型(艺术家或绘画)分组,然后按日期字段(创建),然后最好按布尔字段(已售)。
即类似于以下内容,但它不起作用。我想我需要覆盖 SearchView 并在将查询交给模板之前以某种方式处理查询,但我不确定如何。
或者我应该只是在模板中进行分组?
def get_queryset():
q = SearchQuerySet().filter(display=True).order_by('-created')
paintings_unsold = q.models(Painting).filter(sold=False)
paintings_sold = q.models(Painting).filter(sold=True)
artists = q.models(Artist)
return paintings_unsold | paintings_sold | artists
urlpatterns += patterns(
'',
(r'^search/', SearchView(
searchqueryset=get_queryset()
))
)
【问题讨论】:
-
不确定您所说的“分组依据”是什么意思。搜索视图结果集是项目列表。也许你的意思是“方面”?
-
我想我的意思是,我不想按相关性顺序返回搜索结果(我认为它们是默认的),我想按底层模型类型返回它们,然后按其上的布尔属性返回模型。
-
还是不明白你的意思。您说的是排序顺序,这与分组完全不同。
-
为什么不直接提出 3 个请求?
-
我觉得 faceting 会给你你正在寻找的组。不过,我不知道你会如何订购。这似乎与搜索结果的性质相矛盾。您可以提升某些字段,以便在该字段上匹配时,它们会在搜索结果中显示得更高。但是,听起来更像是您想做一个过滤器,然后再做一些 order_bys。
标签: python django django-haystack whoosh