【问题标题】:Faceted on multiple values of the same field in haystack面向 haystack 中同一字段的多个值
【发布时间】:2016-03-28 15:47:46
【问题描述】:

我正在使用 Haystack 和 SOLR。我正在尝试在一个字段上实现多个值的分面搜索。例如,我正在处理“作者”字段。

john 3
kevin 2
sam 2

我想对“john”或“sam”进行刻面。如何格式化它的 URL?

http://localhost:8000/search/?q=*&selected_facets=author_exact:john +OR+ selected_facets=author_exact:sam

【问题讨论】:

  • 那么您是否只想在构面中使用 johnsam 的值,还是希望将结果集限制为仅包含字段中带有 johnsam 的文档?
  • @MatsLindh 我正在对“作者”字段进行分面。我想要值“john”或“sam”的结果。

标签: solr django-haystack


【解决方案1】:

如果您想将生成的文档集限制为包含johnsam 的文档,请使用fq

fq=author:sam OR author:john

如果您只想针对某些值或查询生成构面,请使用facet.query

facet.query=author:sam OR author:john

【讨论】:

【解决方案2】:

您必须在您的视图/表单中使用 OR 和 narrow()(具体实现取决于您使用的视图/表单)。

由于获取 selected_facets 列表只涉及: self.request.GET.getlist('selected_facets')

您希望如何在您的网址中实现这一点完全取决于您:

  • 您可以使用某种分隔符来做到这一点,然后将它们分开:
    localhost:8000/search/?q=*&selected_facets=author_exact:john|sam

    `for x in selected_facets: field_name, value = x.split(':', 1)

    如果“|”不值: 继续
    值 = x.split('|')`

  • 您也可以这样做:
    localhost:8000/search/q=*&selected_facets=author_exact:john&selected_facets=author_exact:sam

    facet_dict = dict() 对于 selected_facets 中的 x: field_name, value = x.split(':', 1)
    facet_dict[field_name].append(value)

然后大海捞针: sqs.narrow('author_exact:(john OR sam)')

因此,对于如何在 url 中实现多个值进行分面,基本上没有严格的规则/标准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2021-12-30
    • 2013-04-20
    相关资源
    最近更新 更多