打破我的造型productvariants头使用ES(或Solr中为 此事)
考虑(人为的例子):
不同的产品(例如T恤) 每个产品都有一组属性(产品编号,名称,描述,品牌,颜色,受欢迎程度) 每个产品都有一组具有属性(productvariantid(productid ++ size的组合),productid,大小,可用性,价格的productvariant) 这似乎是产品与产品 变体之间的标准父/子关系。因此,我想在ES中进行建模。
我希望能够执行以下操作:
A.查询产品变量(并返回所有属性)。无需返回product-properties,productvariant属性就足够了。
B.限制每个用户查询,以便每个产品最多匹配1个productvariant匹配项(在上面的示例中,这意味着我们限制了productvariant.size)
C.价格过滤。
D.筛选产品的某些属性
E.价格订购
F.订购产品的属性,例如受欢迎程度,或两者的结合。
G.关于productvariant.price的方面
H.产品(父级)的多种属性方面
可以使用父/子文档以及has_parent在ES:AE + G中执行此操作。
但是,F和H呢?我已经研究_scope过 方面(虽然我承认我并没有100%把握可能性)和所有其他 想到的东西,但是我没有找到一种明显的解决方案来显示方面 的产品属性和能力与一起排序 has_parent。
我已经尝试了其他方法(在纸上)-has_child->运气不佳,需要 返回变量信息-嵌入式文档(产品内部变量)并返回 带有所有变量的整个产品。感觉笨拙。此外,我很确定我不能 以这种方式分面/订购价格。
帮助非常感谢
我长时间地用力撞墙,试图使类似的方案起作用。我的方案是产品/供应商关系(多个供应商出售的单个产品,描述/价格/可用性可能不同)。
ES中的Parent-> Child映射现在还不是很健壮或易于使用。即使工作正常,您也会很快遇到边缘情况,这 实际上是不可能的,因为ES不支持它。
我认为您最好的选择是自行管理parent-> child映射,并将文档存储在它们自己的索引中。产品具有一个ID,然后将其作为Product_ID存储在ProductVariant文档中。无论如何,这实际上是ES如何在内部存储父子关系的方式。
实际上,您查询“顶级”索引(产品),然后使用Product_ID字段上的过滤器对ProductVariant的索引执行第二次查询。
维护起来比较麻烦,但灵活性更高。至少直到ES变得更好的“父级->子级”功能为止