Solr facet计数与选择性排除

Dav*_*ave 8 solr 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'代表什么.谁能详细说明?我可以更好地控制如何排除计数吗?

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的计数.

甜!我差点辞职,发送多个查询来获取我需要的信息.