Solr搜索方面:我如何使它们计算产品而不是产品种类

时间:2012-04-08 00:26:56

标签: solr

我正在做的商店出售服装。每件衣服都有多种款式。例如衬衫A可能会进来:红色大号,红色中号,蓝色大号,蓝色中号,白色大号和白色中号。

起初我将每个品种添加为solr doc。因此,对于上述产品,我添加了6个solr文档,每个文档都具有相同的产品ID。我得到了solr,按产品ID对结果进行分组,一切都很完美。

然而,小平面计数是所有品种数量而非产品数量。例如..只是将它限制在上面的一个产品 - (如果这是系统中唯一的产品说)..方面计数将显示:

红色(2) 蓝色(2) 怀特(2)

哪个是正确的,每种颜色都添加了2个文件。但我真正希望看到的是:

红色(1) 蓝色(1) 白色(1)

因为每种颜色只有一种产品。

所以现在我想,为了做到这一点,我需要让每个solr文档成为一个产品。

在这种情况下,我会添加产品,并将字段“颜色”添加3次一个红色,一个蓝色,一个白色,并添加字段大小3次。但是现在solr并不真正知道每种颜色的尺寸。也许我只有白色的小。

这样做的正确方法是什么,使得facet算得上应该是这样?

3 个答案:

答案 0 :(得分:7)

原来我可以使用分组(字段折叠)来完成此操作

http://wiki.apache.org/solr/FieldCollapsing#Request_Parameters

特别是这些参数添加到查询

group=true
group.field=product_id"
group.limit=100
group.facet=true
group.ngroups=true

group.facet是一个真正让facet与我想要的小组一起工作的人。

答案 1 :(得分:1)

我认为你有两个选择。

选项1:

获得构面值列表(给定示例中的红色,蓝色和白色)后,再次触发原始查询,并将每个构面值作为过滤器。例如,如果原始查询为q=xyz&group.field=ProductID,则触发q=xyz&group.field=ProductID&group.ngroups=true&fq=color:Red。响应中的ngroups值将为您提供Red所需的计数。同样,为Blue和White单独查询。

选项2:

创建一个名为Product_Color的单独字段,其中包含ProductID和颜色。例如,如果产品的ID为ABC123且颜色为Red,则Product_Color将为ABC123_Red。现在,要获取颜色的方面,请触发一个单独的查询,该查询按Product_Color而不是ProductID分组,您将获得具有正确值的所需方面。请记住设置group.truncate=true以使其正常工作。

答案 2 :(得分:0)

您可以尝试查看Facet Pivot,这样您就可以拥有单个文档,树状结构以及正确的计数和过滤。