solr - 多选 Solr 过滤和分面

标签 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
[] 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>

用户选择“耐克”

首先,您从品牌方面选择“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>

用户选择“黑色”

现在用户从颜色方面选择“黑色”。我们添加另一个用颜色标记的新过滤器查询,以将其从结果中排除。

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 - 多选 Solr 过滤和分面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802792/

相关文章:

Django Haystack - 如何提升一个领域?

java - 有人用过solr5.5吗? Mysql包应该放在哪个目录下?

r - 如果位于唯一 ID 的开头或结尾,则过滤连续的相同值

date - 筛选 SharePoint 列表上的年初至今条目

jsf - 为什么我的 JSF 复合构面在未渲染构面时会进行验证

java - Solr + Spring Roo 为每个客户提供单独的索引

ios - NSPredicate 返回空数组

elasticsearch - ElasticSearch:使用过滤器查询从所有结果中获取构面

r - 忽略 ggplot2 boxplot + faceting + "free"选项中的异常值

Solr 使用 ContentStreamUpdateRequest 上传文件时出错