我不确定这是否可行,但我希望能够更加密切地控制返回的方面,而不仅仅是包含和排除.
具体来说,我有一个允许用户按'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'代表什么.谁能详细说明?我可以更好地控制如何排除计数吗?
Dav*_*ave 10
好的,我想通了.'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
Run Code Online (Sandbox Code Playgroud)
这意味着facetA的选择(fq)不会影响facetA的计数,facetB的选择(fq)不会影响facetB的计数.
甜!我差点辞职,发送多个查询来获取我需要的信息.