Solr 为我创建多选分面计数,如下所述:
我还有各种预定义搜索,允许用户浏览目录。这是一个这样的例子及其查询参数:
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。
最佳答案
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
facet_queries 对象现在将填充在 solr 响应中:
{
...
"facet_counts": {
"facet_queries": {
"{!ex=g}genre:western": 7
},
...
},
...
}
无论 facet_fields
对象返回什么,我现在都可以保证 genre:western
有一个分面数。通过一些解析,可以从方面查询中提取方面字段计数。
关于特定字段值的 Solr 构面计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26875022/