多选Solr过滤和分面

多选Solr过滤和分面,solr,filter,facet,faceted-search,Solr,Filter,Facet,Faceted Search,我试图为我的Solr服务实现方面,但我对我看到的东西有点困惑。我知道标记和排除用于忽略特定的过滤器计数,因此会发生类似的情况: [] Nike 55 [] Adidas 54 [] New Balance 32 [] Black 25 [] Blue 26 [] Red 29 [] Yellow 23 --------------- [X] Nike 55 [] Adidas 54 [] New Balance 32 [] Black 20 [] Blue 15 [] Red 13 []

我试图为我的Solr服务实现方面,但我对我看到的东西有点困惑。我知道标记和排除用于忽略特定的过滤器计数,因此会发生类似的情况:

[] Nike 55
[] Adidas 54
[] New Balance 32

[] Black 25
[] Blue 26
[] Red 29
[] Yellow 23
---------------

[X] Nike 55
[] Adidas 54
[] New Balance 32

[] Black 20
[] Blue 15
[] Red 13
[] Yellow 13


[X] Nike 20
[] Adidas 0
[] New Balance 0

[X] Black 20
[] Blue 15
[] Red 13
[] Yellow 13
我理解,在上述情况下,我们将对Solr查询的品牌进行过滤,并在品牌过滤器/方面传递标记/排除,以便计数仅在品牌上保持不变。然后,我们按颜色过滤,保持这些计数不变,同时让其他计数改变

然而,这里是我陷入困境的地方。在较大的网站上,如Newegg、Amazon等。。。我注意到情况并非如此。当我按第一个过滤器选择时,我选择的过滤器计数不会更改,而其他计数会更改

[X] Nike 51
[] Adidas 54
[] New Balance 32

[] Black 20
[] Blue 15
[] Red 13
[] Yellow 13
然后,当我选择与第一个不同的第二个过滤器时,第二个过滤器计数不会改变,但第一个过滤器计数的变化方式不会使计数为零,如下所示:

[X] Nike 8
[] Adidas 12
[] New Balance 5

[X] Black 20
[] Blue 15
[] Red 13
[] Yellow 13

这里发生了什么?我觉得我在错误地向solr发送方面和过滤器。我只为最近选择的筛选器发送标记和排除。始终根据最近的选择更改其他计数。但在我概述的最后一个案例中,品牌过滤器并没有归零,即使我只搜索黑色耐克鞋;我仍然得到阿迪达斯和新平衡的预期计数。很抱歉,这篇文章太长了,但是我想不出一个没有示例的好方法来解释它。

你的问题是,当你第二次筛选结果时,你忘记标记你的品牌筛选查询。 让我们举一个例子来解决您的问题。请参考我正在使用的查询

<lst name="brand">
<int name="Nike">6</int>
<int name="Adidas">3</int>
<int name="New Balance">1</int>
</lst>
<lst name="color">
<int name="Black">5</int>
<int name="Blue">5</int>
</lst>
我们得到的回应

<lst name="facet_fields">
<lst name="brand">
<int name="Nike">6</int>
<int name="Adidas">3</int>
<int name="New Balance">1</int>
</lst>
<lst name="color">
<int name="Black">3</int>
<int name="Blue">3</int>
</lst>
我们得到的回应

<lst name="brand">
<int name="Nike">3</int>
<int name="Adidas">2</int>
<int name="New Balance">0</int>
</lst>
<lst name="color">
<int name="Black">3</int>
<int name="Blue">3</int>
</lst>

六羟甲基三聚氰胺六甲醚。。。我真的不明白。标记和排除不应该保持过滤器值的计数不变吗?如果是这样,为什么在我添加第二个排除项时,这些值会发生变化?请参见此处了解UX rational:
facet=true
&facet.field={!ex=brand}brand
&facet.field={!ex=color}color
&fq={!tag=brand}brand:Nike
&fq={!tag=color}color:Black
<lst name="brand">
<int name="Nike">3</int>
<int name="Adidas">2</int>
<int name="New Balance">0</int>
</lst>
<lst name="color">
<int name="Black">3</int>
<int name="Blue">3</int>
</lst>