Solr facet计数与选择性排除

时间:2011-08-02 04:43:29

标签: solr facet

我不确定这是否可行,但我希望能够更加密切地控制为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'代表什么。谁能详细说明?我可以更好地控制如何排除计数吗?

2 个答案:

答案 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' ....

再次感谢您之前的帖子。