1

我正在工作的商店卖衣服。每件衣服都有多个品种。例如,衬衫 A 可能有:红色大号、红色中号、蓝色大号、蓝色中号、白色大号和白色中号。

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

然而,方面计数都是品种计数,而不是产品计数。因此,例如..仅将其限制为上面的一种产品-(如果这是系统中唯一的产品)..方面计数将显示:

红色 (2) 蓝色 (2) 白色 (2)

这是正确的,每种颜色都添加了 2 个文档。但我真正想看到的是:

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

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

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

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

什么是正确的方法来做到这一点,以使方面发挥应有的作用?

4

3 回答 3

8

原来我可以在这里使用分组(字段折叠)来做到这一点

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 是真正让 facets 像我希望的那样与组一起工作的那个。

于 2012-09-21T20:00:56.497 回答
1

I think that you have 2 options.

Option 1:

Once you get the list of facet values (Red, Blue & White in the given example), then fire the original query again with each facet value as a filter. For example, if the original query was q=xyz&group.field=ProductID then fire q=xyz&group.field=ProductID&group.ngroups=true&fq=color:Red. The ngroups value in the response will give you the required count for Red. Similarly, fire a separate query for Blue and White.

Option 2:

Create a separate field called Product_Color which includes both the ProductID and the color. For example, if a product has ID is ABC123 and color is Red, then Product_Color will be ABC123_Red. Now, to get the facets for color, fire a separate query which groups by Product_Color instead of ProductID and you will get the required facets with the correct values. Remeber to set group.truncate=true for this to work.

于 2012-04-08T04:23:19.033 回答
0

您可以尝试查看Facet Pivot,这将允许您拥有单个文档、具有适当计数和过滤的树状构面。

于 2012-04-08T08:43:08.477 回答