通过多选面进行搜索

时间:2012-12-29 02:18:11

标签: sql search e-commerce spree facets

我的电子商务网站上有产品过滤器。产品有许多ProductProperties,它们属于Properties(基本属性类型)(Spree DB schema)。

属性为:“brand”,“product_type”,“collection_status”和“collection_season”。用户可以使用复选框(每个过滤器的多个值)过滤每个过滤器,因此他可以选择“品牌'袜子'或'衬衫'的品牌'lacoste'或'fred perry'”。

这个逻辑对我来说很难理解。我很困惑:我可以在一个SQL查询中执行搜索吗?这个查询有意义吗?

SELECT COUNT(DISTINCT "spree_products"."id") FROM "spree_products" 
  LEFT OUTER JOIN "spree_product_properties" ON "spree_product_properties"."product_id" = "spree_products"."id" 
  WHERE 
    ("spree_product_properties"."value" in ('lacoste', 'fred perry') AND "spree_product_properties"."property_id" = 161337574) 
    AND 
    ("spree_product_properties"."value" in ('socks', 'shirts') AND "spree_product_properties"."property_id" = 905834903)

我可以看到,asos在类似情况下执行多步搜索。

更新:上面的查询会产生错误的搜索结果。如果您愿意,可以在沙盒中试用。

1 个答案:

答案 0 :(得分:1)

使用spree框架进行分析项目时,我使用Looker中的现有LookML模板。这样我就不会编写手动查询,Looker知道它生成查询的模式。

My template for spree涵盖了基本的狂欢安装。

如果您计划将Spree与其他第三方工具集成,那么您只需要扩展模型。