我不确定这是否可行,但我希望能够更加密切地控制为facet返回的计数,而不仅仅是包含和排除。
具体来说,我有一个允许用户按'facetA'和'facetB'过滤的界面。看起来有点像这样
Filter by - facetA: article (20), image (6), activity (14) - facetB: cats (23), dogs(12), hedgehogs(5)
界面清楚表明facetA在层次结构中高于facetB。 我希望facetA完全持久,facetB也算是持久的,但依赖于facetA的选择。
因此,界面可能会对:facetB的更改作出反应:
Filter by - facetA: article (20), image (6), activity (14) - facetB: cats (23), dogs(12), hedgehogs(5)
即。没有一个计数会改变。
但它会对这样的facetA变化作出反应:
Filter by - facetA: article (20), image (6), activity (14) - facetB: cats (15), dogs(4), hedgehogs(1)
,即facetB计数更改以反映应用facetA过滤器后可用的内容。
刚做
& facet.field = {!ex = dt} fieldA& facet.field = {!ex = dt} fieldB
没有实现我想要的,但它很接近。我在solr wiki中发现这方面的说明非常模糊 - 就像我甚至不知道'dt'代表什么。谁能详细说明?我可以更好地控制如何排除计数吗?
答案 0 :(得分:9)
好的,我想出来了。 'dt'是用户指定的标记,使用{!tag = *}语句设置,并使用{!ex =}语句引用。
因此,如果我在查询中添加以下内容,则上述示例已修复:
&fq={!tag=tagA}fieldA:facetASelection
&fq={!tag=tagB}fieldB:facetBSelection
&facet=true
&facet.field={!ex=tagA}fieldA
&facet.field={!ex=tagB}fieldB
这意味着facetA的选择(fq)不会影响facetA的计数,facetB的选择(fq)不会影响facetB的计数。
甜!我差点辞职,发送了多个查询来获取我需要的信息。
答案 1 :(得分:3)
感谢。这个答案几乎让我节省了一天。
基本上我跟随http://wiki.apache.org/solr/SimpleFacetParameters
中的例子,即
q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&facet=on&facet.field={!ex=dt}doctype
因此,当我有多个方面时,我仍然在两个方面使用{!tag=dt} & {!ex=dt}
。
注意:正确指向的dt
是用户定义的标签,用于该方面。
因此,如果我对这两个方面使用dt
,我就无法获得预期的响应。
取而代之的=>使用'dt1' & 'dt2'
...表示多个方面或如上例所述,使用'tagA'
,'tagB'
....
再次感谢您之前的帖子。