Solr facet计算特定字段值

时间:2014-11-11 21:36:01

标签: solr faceted-search

Solr为我创建多选小平面计数,如下所述:

https://wiki.apache.org/solr/SimpleFacetParameters#Multi-Select_Faceting_and_LocalParams

我还有各种预定义搜索,允许用户浏览目录。这是一个这样的例子及其查询参数:

q=*:*
fq={!tag=g}genre:western
facet=on
facet.field={!ex=g}genre
facet.mincount=1
facet.limit=50

通过此搜索,我可以在方面列表中获得最多50个类型的值。然后我通过并标记用户选择的值;在这种情况下,西方。这很有效,除非 western 被推出前50名。所以我手动将它添加到列表中以使总共51.这样用户可以看到它确实被选中。问题是我必须将 western 的计数留空,因为我不知道。

在这种情况下,有没有办法获得特定方面值的计数,例如 western ?还是另一种解决这个问题的方法?

我正在使用Solr 4.7.0。

1 个答案:

答案 0 :(得分:1)

Solr允许您使用facet.query参数创建基于查询的构面计数。在创建基于构面字段值的过滤器查询(fq)时,我现在创建相应的构面查询:

facet.query={!ex=g}genre:western

并将其添加到我的其余参数中:

q=*:*
fq={!tag=g}genre:western
facet=on
facet.field={!ex=g}genre
facet.query={!ex=g}genre:western
facet.mincount=1
facet.limit=50

现在将在solr响应中填充facet_queries对象:

{
  ...
  "facet_counts": {
    "facet_queries": {
      "{!ex=g}genre:western": 7
    },
    ...
  },
  ...
}

无论facet_fields对象返回什么内容,我现在都保证genre:western有一个方面计数。通过一些解析,可以从构面查询中提取构面字段计数。