gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:55:57 26 4
gpt4 key购买 nike

在使用 ES(或 Solr 就此而言)对产品变体进行建模时让我头疼

考虑(人为的例子):

  • 不同的产品(例如 T 恤)
  • 每个产品都有一组属性(productid、name、desc、brand、color、popularity)
  • 每个产品都有一组具有属性的 productvariants(productvariantid(productid++size 的组合)、productid、size、availability、price)

这似乎是产品和产品变体之间的标准父/子关系。所以我想在 ES 中像那样建模。

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

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

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

  • C.按价格过滤。

  • D.过滤产品的一些属性

  • E.按价下单

  • F.根据产品属性(例如受欢迎程度或两者的组合)进行排序。

  • G. productvariant.price 方面

  • H.产品(父级)多个属性的方面

在 ES 中对父/子文档和 has_parent 执行此操作:A-E + G 是可能的。

但是,FH 呢?我已经研究过 _scope 方面的东西(尽管不可否认我没有 100% 的可能性)和想到的所有其他东西,但我没有看到一个明显的解决方案来展示产品属性的方面,并能够结合 has_parent 对它们进行排序。

我尝试过其他东西(纸上) - has_child -> 运气不好需要返回变体信息 - 嵌入式文档(产品内部的变体)并返回包含所有变体的整个产品。只是感觉笨拙。此外,我很确定我不能以这种方式对价格进行分面/订购。

非常感谢帮助

最佳答案

我在墙上撞了很长时间,试图让类似的方案发挥作用。我的方案是产品/供应商关系(多个供应商销售的单一产品,可能有不同的描述/价格/可用性)。

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

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

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

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

关于elasticsearch - 在 Elasticsearch 中建模父/子关系(产品/产品变体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com