elasticsearch 在Elasticsearch中建模父/子关系(产品/产品变量),elasticsearch,elasticsearch" /> elasticsearch 在Elasticsearch中建模父/子关系(产品/产品变量),elasticsearch,elasticsearch" />

elasticsearch 在Elasticsearch中建模父/子关系(产品/产品变量)

elasticsearch 在Elasticsearch中建模父/子关系(产品/产品变量),elasticsearch,elasticsearch,在使用ES(或Solr)对产品变量进行建模时,我的头都碎了 考虑(人为的例子): 不同的产品(比如T恤衫) 每个产品都有一组属性(productid、名称、描述、品牌、颜色、流行度) 每个产品都有一组具有属性的产品变体(ProductVariatid(productid++大小的组合)、productid、大小、可用性、价格) 这似乎是产品和productvariant之间的标准父/子关系。所以我想在ES中这样建模 我希望能够做到以下几点: A.查询productvariants(并返回所

在使用ES(或Solr)对产品变量进行建模时,我的头都碎了

考虑(人为的例子):

  • 不同的产品(比如T恤衫)
  • 每个产品都有一组属性(productid、名称、描述、品牌、颜色、流行度)
  • 每个产品都有一组具有属性的产品变体(ProductVariatid(productid++大小的组合)、productid、大小、可用性、价格)
这似乎是产品和productvariant之间的标准父/子关系。所以我想在ES中这样建模

我希望能够做到以下几点:

  • A.查询productvariants(并返回所有属性)。不需要返回产品属性,productvariant属性就足够了

  • B.每个用户查询都受到约束,因此每个产品最多有1个productvariant匹配(在上面的示例中,这意味着我们约束productvariant.size)

  • C.根据价格进行筛选

  • D.过滤产品的某些特性

  • E.按价格订购

  • F.根据产品属性排序,如受欢迎程度,或2的组合

  • G.关于产品变量和价格的方面

  • H.产品(母公司)多重属性的方面

可以对父/子文档执行此操作,并且在ES中具有父级:A-E+G

但是,FH呢?我已经研究了facet的
\u scope
(虽然我不认为可能性是100%)和所有其他想到的东西,但是我没有看到一个明显的解决方案来显示产品属性的facet,并能够结合
has\u parent
对它们进行排序

我试过其他东西(在纸上) -已返回\u child->无幸运需求变量信息 -嵌入文档(产品内部的变体)并返回包含所有变体的整个产品。它只是觉得笨重。此外,我很确定我不能以这种方式在价格上下订单


非常感谢你的帮助

为了让一个类似的计划奏效,我费了很长时间才把头撞在墙上。我的方案是一种产品/供应商关系(由多个供应商销售的单个产品,可能有不同的描述/价格/可用性)

ES中的父->子映射现在不是很健壮,也不容易使用。即使你得到了一些工作,你也会很快遇到边缘的情况,这些情况实际上是不可能的,因为ES不支持它

我认为最好是自己管理父->子映射,并将文档存储在自己的索引中。产品有一个ID,然后作为产品ID存储在ProductVariant文档中。这实际上是ES在内部存储父->子关系的方式

实际上,您可以查询“顶级”索引(产品),然后使用Product_ID字段上的过滤器对ProductVariant的索引执行第二次查询


维护起来有点麻烦,但要灵活得多。至少在ES获得更好的父母->子女能力之前

自我说明:实施这一点可能是可行的:同意挑战!在您的情况下,您将如何根据价格(在供应商索引中)对产品进行排序,因为无法限制返回的产品id,因为无法事先告知它们将如何按正确的价格进行订购?因此,换句话说,您对产品的第一次查询需要返回所有匹配的产品ID,以便在第二次查询中查找订单,这似乎非常低效?最不令人恼火的方法就是对数据进行反规范化。当供应商价格发生变化时,我会更新供应商文档,然后用“最低价格”字段更新产品文档。我可以根据最低价格字段进行排序,而无需再进行查询。我有很强的关系型DBM背景,所以这需要一些心理训练来适应。或者,您可以按相关性排序,抓取前100名,查询价格,然后(在ES之外)根据价格得出结果。通常人们想要“与我的查询仍然相关的最低价格”,所以它可以很好地工作。