【问题标题】:Solr Search Facets: How do i make them count products and NOT product varietiesSolr Search Facets:我如何让它们计算产品而不是产品品种
【发布时间】:2012-04-08 00:26:55
【问题描述】:

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

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

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

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

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

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

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

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

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

要使方面发挥应有的作用,正确的方法是什么?

【问题讨论】:

    标签: solr


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    我认为你有两个选择。

    选项 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 以使其正常工作。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 2018-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多