使用ES(或Solr就此问题)对产品变形进行建模
考虑(人为的例子):
这似乎是产品和产品变量之间的标准父/子关系。所以我想像ES那样建模。
我希望能够做到以下几点:
一个。查询productvariants(并返回所有属性)。无需返回产品属性,产品变量属性就足够了。
B中。每个用户查询都受到约束,因此每个产品最多匹配1个产品变量(在上面的示例中,这意味着我们约束productvariant.size)
℃。过滤价格。
d。过滤产品的某些属性
电子。价格订购
F。订购产品的财产,如人气,或2的组合。
-G。 facet on productvariant.price
小时。关于产品的多个属性(父母)的方面
使用父/子文档和ES中的has_parent
执行此操作: A-E + G 是可能的。
然而, F 和 H 怎么样?我已经将_scope
作为方面进行了调查(虽然我不确定100%的可能性)和所有其他想到的东西,但我没有看到显示产品方面的明显解决方案-properties并能够与has_parent
一起排序。
我尝试了其他的东西(纸上) - has_child - >没有运气需要返回变量信息 - 嵌入式文档(产品内部变体)并返回包含所有变体的整个产品。它只是感觉笨重。而且我很确定我不能以这样的价格面对/订购。
非常感谢
答案 0 :(得分:3)
我把头撞在墙上很长一段时间试图让类似的计划工作。我的方案是产品/供应商关系(由多个供应商销售的单个产品,可能有不同的描述/价格/可用性)。
Parent-> ES中的子映射现在不是很强大或易于使用。即使你得到了一些有用的东西,你也会很快遇到边缘情况,因为ES不支持边缘情况。
我认为您最好的选择是自己管理parent->子映射,并将文档存储在自己的索引中。产品具有ID,然后将其作为Product_ID存储在ProductVariant文档中。这实际上是ES无论如何在内部存储父 - >子关系的方式。
在实践中,您查询“顶级”索引(产品),然后使用Product_ID字段上的过滤器对ProductVariant的索引执行第二次查询。
维护起来有点麻烦但是更灵活。至少在ES获得更好的Parent-> Child能力
之前