Multi-select Solr 过滤和分面
Multi-select Solr filtering and faceting
我正在尝试为我的 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 查询过滤品牌,并在品牌 filter/facet 上传递 tag/exclusion 以使计数仅在品牌上保持不变.然后,我们按颜色过滤,并保持这些计数相同,同时让其他计数(品牌)发生变化。
然而,这就是我卡住的地方。在较大的网站(如 Newegg、Amazon 等)上,我注意到情况并非如此。当我 select 通过我的第一个过滤器时,我 selected 的过滤器计数不会改变,而其他计数会改变。
[X] Nike 51
[] Adidas 54
[] New Balance 32
[] Black 20
[] Blue 15
[] Red 13
[] Yellow 13
然后,当我 select 通过第二个过滤器(与第一个不同)时,第二个过滤器计数不会改变,但第一个过滤器计数会以一种不会清零的方式发生变化计数,像这样:
[X] Nike 8
[] Adidas 12
[] New Balance 5
[X] Black 20
[] Blue 15
[] Red 13
[] Yellow 13
这里发生了什么?我觉得我发送的方面和过滤器不正确。我只发送最近 selected 过滤器的标签和排除项。这总是根据最近的 selection 改变其他计数。但在我概述的最后一个案例中,即使我只搜索黑色耐克鞋,品牌过滤器也没有归零;我仍然可以得到阿迪达斯和新百伦的预期数据。很抱歉 post 太长了,但我想不出没有例子的好方法来解释它。
你的问题是当你过滤你的结果 第二次你忘记标记你的品牌过滤器查询。
让我们举个例子来解决你的 problem.Please 参考我正在使用的查询
<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>
用户选择"Nike"
首先你 select 来自品牌方面的 "Nike"。我们添加标有品牌的过滤器以从结果中排除并重新发出请求
facet=true
&facet.field={!ex=brand}brand
&fq={!tag=brand}brand:Nike
我们得到的回应
<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>
用户选择"Black"
现在用户 select "Black" 来自颜色方面。我们添加了另一个用颜色标记的新过滤器查询,以将其从结果中排除。
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>
我正在尝试为我的 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 查询过滤品牌,并在品牌 filter/facet 上传递 tag/exclusion 以使计数仅在品牌上保持不变.然后,我们按颜色过滤,并保持这些计数相同,同时让其他计数(品牌)发生变化。
然而,这就是我卡住的地方。在较大的网站(如 Newegg、Amazon 等)上,我注意到情况并非如此。当我 select 通过我的第一个过滤器时,我 selected 的过滤器计数不会改变,而其他计数会改变。
[X] Nike 51
[] Adidas 54
[] New Balance 32
[] Black 20
[] Blue 15
[] Red 13
[] Yellow 13
然后,当我 select 通过第二个过滤器(与第一个不同)时,第二个过滤器计数不会改变,但第一个过滤器计数会以一种不会清零的方式发生变化计数,像这样:
[X] Nike 8
[] Adidas 12
[] New Balance 5
[X] Black 20
[] Blue 15
[] Red 13
[] Yellow 13
这里发生了什么?我觉得我发送的方面和过滤器不正确。我只发送最近 selected 过滤器的标签和排除项。这总是根据最近的 selection 改变其他计数。但在我概述的最后一个案例中,即使我只搜索黑色耐克鞋,品牌过滤器也没有归零;我仍然可以得到阿迪达斯和新百伦的预期数据。很抱歉 post 太长了,但我想不出没有例子的好方法来解释它。
你的问题是当你过滤你的结果 第二次你忘记标记你的品牌过滤器查询。
让我们举个例子来解决你的 problem.Please 参考我正在使用的查询
<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>
用户选择"Nike"
首先你 select 来自品牌方面的 "Nike"。我们添加标有品牌的过滤器以从结果中排除并重新发出请求
facet=true
&facet.field={!ex=brand}brand
&fq={!tag=brand}brand:Nike
我们得到的回应
<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>
用户选择"Black"
现在用户 select "Black" 来自颜色方面。我们添加了另一个用颜色标记的新过滤器查询,以将其从结果中排除。
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>