9

我不确定这是否可能,但我希望能够更密切地控制为方面返回的计数,而不仅仅是包含和排除。

具体来说,我有一个界面允许用户按“facetA”和“facetB”进行过滤。看起来有点像这样

  过滤
    - facetA:文章(20),图像(6),活动(14)
    - facetB:猫(23),狗(12),刺猬(5)

该界面清楚地表明 facetA 在层次结构中高于 facetB。我希望 facetA 计数是完全持久的,而 facetB 计数也是持久的,但取决于 facetA 的选择。

因此,界面可能会对 facetB 的更改做出反应:

  过滤
    - facetA:文章(20),图像(6),活动(14)
    - facetB:猫(23),狗(12),刺猬(5)

即没有任何计数改变。

但它会对这样的 facetA 变化做出反应:

  过滤
    - facetA:    文章(20),图像(6),活动(14)
    - facetB:猫(15),狗(4),刺猬(1)

即, facetB 计数发生变化以反映应用 facetA 过滤器后可用的内容。

只是在做

&facet.field={!ex=dt}fieldA&facet.field={!ex=dt}fieldB

没有达到我想要的效果,但它很接近。我发现 solr wiki 中的说明非常模糊 - 就像我什至不知道 'dt' 代表什么。谁能详细说明?我可以更好地控制计数如何被排除吗?

4

2 回答 2

11

好的,我想通了。'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 的计数。

甜的!我几乎已经放弃了发送多个查询来获取我需要的信息。

于 2011-08-04T01:51:24.913 回答
3

谢谢。这个答案为我节省了将近一天的时间。

基本上我是按照http://wiki.apache.org/solr/SimpleFacetParametersie中的示例进行的

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

再次感谢您之前的帖子。

于 2012-07-20T10:15:46.783 回答