【问题标题】:How to group Haystack search results in Django如何在 Django 中对 Haystack 搜索结果进行分组
【发布时间】: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


【解决方案1】:

只是为了澄清分面不等于分组结果。 SOLR 可以做到这一点,例如(版本 4):https://cwiki.apache.org/confluence/display/solr/Result+Grouping

但您实际上要求的是刻面,如 cmets 中所述:

http://django-haystack.readthedocs.org/en/v2.4.0/faceting.html https://cwiki.apache.org/confluence/display/solr/Faceting

我将为 SOLR 提供一个答案,即使这个问题被标记为 Whoosh。它可能仍然有帮助。


您希望在sold 字段和artist_exact 字段上进行分面,您可能必须创建该字段。它必须是string 类型,否则你的刻面看起来会很奇怪。

因此,您当前的 artist 字段可能(推荐)是一个文本字段,它以某种方式标记输入。只需在schema.xml 中添加一个不标记化的新字段和一个复制指令,将艺术家复制到这个新字段。

<field name="artist" type="text_general" indexed="true" stored="true"/>
<field name="artist_exact" type="string" indexed="true" stored="false"/>
<copyField source="artist" dest="artist_exact" />

solrconfig.xml 中将以下参数添加到您的搜索处理程序:

<str name="facet">on</str>
<str name="facet.field">sold</str>
<str name="facet.field">artist_exact</str>

Haystack 提供了你可以使用的 FacetedSearchView。它将分面信息添加到模板上下文中。

【讨论】:

    猜你喜欢
    • 2016-06-13
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多