使用solr facets作为过滤器

时间:2016-06-10 18:45:06

标签: solr

当查询solr的产品时,我也返回了facet。适用于类别,尺寸,颜色,价格等字段。

所以我做了一些事情:

solr.search(*:*, **{'start': 0,
                    'rows': 50,
                    'defType': 'edismax',
                    'fq': '(category=Shoes)',
                    'facet': 'true',
                    'facet.limit': -1,
                    'facet.field': ['size', 'colour', 'price'],
                    'facet.mincount': 0})

如果我查询类别"Shoes",我会看到与该类别匹配的可能尺寸,颜色和价格。现在,如果我添加到过滤器(colour:Red),那么所有其他可能的颜色将消失,这是合乎逻辑的,因为它现在在颜色上过滤,但用户可能想要选择两种颜色。

实现这一目标的更好/通常的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以通过向fq添加标记然后在创建构面时排除这些标记来实现此目的。一个例子是在Faceting - LocalParameters for Faceting中显示:

  

要返回当前未选中的doctype值的计数,请标记直接约束doctype的过滤器,并在doctype上进行分面时排除这些过滤器。

     

q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&facet=true&facet.field={!ex=dt}doctype

     

所有类型的构面都支持过滤器排除。标记和ex本地参数都可以通过用逗号分隔来指定多个值。

然后,实施将在每个过滤器的fq中为每个过滤器选择不同的选定值(因此您获得color:red OR color:bluecolor:(red OR blue)

Yonik也has an example on his blog that's very close to your use-case,但它使用的方法与上面参考手册中显示的方法相同。