elasticsearch 在Elasticsearch中建模父/子关系(产品/产品变量)
在使用ES(或Solr)对产品变量进行建模时,我的头都碎了 考虑(人为的例子):
elasticsearch 在Elasticsearch中建模父/子关系(产品/产品变量),
elasticsearch,
elasticsearch,在使用ES(或Solr)对产品变量进行建模时,我的头都碎了 考虑(人为的例子): 不同的产品(比如T恤衫) 每个产品都有一组属性(productid、名称、描述、品牌、颜色、流行度) 每个产品都有一组具有属性的产品变体(ProductVariatid(productid++大小的组合)、productid、大小、可用性、价格) 这似乎是产品和productvariant之间的标准父/子关系。所以我想在ES中这样建模 我希望能够做到以下几点: A.查询productvariants(并返回所
- 不同的产品(比如T恤衫)
- 每个产品都有一组属性(productid、名称、描述、品牌、颜色、流行度)
- 每个产品都有一组具有属性的产品变体(ProductVariatid(productid++大小的组合)、productid、大小、可用性、价格)
- A.查询productvariants(并返回所有属性)。不需要返回产品属性,productvariant属性就足够了
- B.每个用户查询都受到约束,因此每个产品最多有1个productvariant匹配(在上面的示例中,这意味着我们约束productvariant.size)
- C.根据价格进行筛选
- D.过滤产品的某些特性
- E.按价格订购
- F.根据产品属性排序,如受欢迎程度,或2的组合
- G.关于产品变量和价格的方面
- H.产品(母公司)多重属性的方面
\u scope
(虽然我不认为可能性是100%)和所有其他想到的东西,但是我没有看到一个明显的解决方案来显示产品属性的facet,并能够结合has\u parent
对它们进行排序
我试过其他东西(在纸上)
-已返回\u child->无幸运需求变量信息
-嵌入文档(产品内部的变体)并返回包含所有变体的整个产品。它只是觉得笨重。此外,我很确定我不能以这种方式在价格上下订单
非常感谢你的帮助为了让一个类似的计划奏效,我费了很长时间才把头撞在墙上。我的方案是一种产品/供应商关系(由多个供应商销售的单个产品,可能有不同的描述/价格/可用性) ES中的父->子映射现在不是很健壮,也不容易使用。即使你得到了一些工作,你也会很快遇到边缘的情况,这些情况实际上是不可能的,因为ES不支持它 我认为最好是自己管理父->子映射,并将文档存储在自己的索引中。产品有一个ID,然后作为产品ID存储在ProductVariant文档中。这实际上是ES在内部存储父->子关系的方式 实际上,您可以查询“顶级”索引(产品),然后使用Product_ID字段上的过滤器对ProductVariant的索引执行第二次查询
维护起来有点麻烦,但要灵活得多。至少在ES获得更好的父母->子女能力之前自我说明:实施这一点可能是可行的:同意挑战!在您的情况下,您将如何根据价格(在供应商索引中)对产品进行排序,因为无法限制返回的产品id,因为无法事先告知它们将如何按正确的价格进行订购?因此,换句话说,您对产品的第一次查询需要返回所有匹配的产品ID,以便在第二次查询中查找订单,这似乎非常低效?最不令人恼火的方法就是对数据进行反规范化。当供应商价格发生变化时,我会更新供应商文档,然后用“最低价格”字段更新产品文档。我可以根据最低价格字段进行排序,而无需再进行查询。我有很强的关系型DBM背景,所以这需要一些心理训练来适应。或者,您可以按相关性排序,抓取前100名,查询价格,然后(在ES之外)根据价格得出结果。通常人们想要“与我的查询仍然相关的最低价格”,所以它可以很好地工作。