当查询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)
,那么所有其他可能的颜色将消失,这是合乎逻辑的,因为它现在在颜色上过滤,但用户可能想要选择两种颜色。
实现这一目标的更好/通常的方法是什么?
答案 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:blue
或color:(red OR blue)
。
Yonik也has an example on his blog that's very close to your use-case,但它使用的方法与上面参考手册中显示的方法相同。