我不确定这是否可行,但我希望能够更加精确地控制返回的方面数,而不仅仅是包含和排除。
具体来说,我有一个界面,允许用户按“facetA”和“facetB”进行过滤。看起来有点像这样
过滤
-facetA:文章(20),图片(6),事件(14)
-faceB:猫(23),狗(12),刺猬(5)
该接口(interface)清楚地表明,facetA在层次结构中比facetB高。
我希望facetA可以完全持久化,而facetB也可以持久化,但要取决于facetA的选择。
因此,接口(interface)可能会对facetB的更改做出以下 react :
过滤
-facetA:文章(20),图片(6),事件(14)
-faceB:猫(23),狗(12),刺猬(5)
也就是说,任何一项都不会改变。
但是它将对facetA更改做出如下 react :
过滤
-facetA:文章(20),图片(6),事件(14)
-facetB:猫(15),狗(4),刺猬(1)
也就是说,facetB计数发生变化以反射(reflect)应用了facetA过滤器后可用的内容。
只是在做
&facet.field = {!ex = dt} fieldA&facet.field = {!ex = dt} fieldB
达不到我想要的效果,但是很接近。我发现Solr Wiki中对此的说明非常含糊-就像我什至都不知道'dt'代表什么。谁能详细说明?我可以更好地控制如何排除计数吗?
最佳答案
好的,我知道了。 '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的计数。
甜的!我几乎辞职了,发送了多个查询来获取所需的信息。
关于选择性排除的Solr构面计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6907341/