当前位置: 首页 > 知识库问答 >
问题:

在Elasticsearch中建模父/子关系(Product/ProductVariant)

阴雪风
2023-03-14

使用ES(或Solr)建模productvariants让我大吃一惊

考虑(人为的例子):

  • 不同的产品(如T恤)
  • 每个产品都有一组属性(productid、名称、desc、品牌、颜色、知名度)
  • 每个产品都有一组具有属性的productvariants(productvariantid(productid++大小的组合)、productid、大小、可用性、价格)

这似乎是product和ProductVariant之间的标准父/子关系。所以我想在ES中这样建模。

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

>

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

    b.对每个用户查询进行约束,以便每个产品最多匹配1个productvariant(在上面的示例中,这意味着我们对productvariant.Size进行约束)

    C.价格过滤。

    D.关于乘积某些性质的滤波

    可以使用父/子文档和has_parent在ES:A-E+G中执行此操作。

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

    我尝试过其他的东西(在纸上)-has_child->运气不好,需要返回变量信息-嵌入文档(产品内部的变量),并返回整个产品和所有变量。只是感觉很笨拙。此外,我很肯定我不能这样在价格上加分/订货。

    非常感激的帮助

  • 共有1个答案

    赵智
    2023-03-14

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

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

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

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

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

     类似资料:
    • 问题内容: 在使用ES(或Solr)对产品变量进行建模时,我的头脑破了 考虑(人为的例子): 不同的产品(例如T恤) 每个产品都有一组属性(产品编号,名称,描述,品牌,颜色,受欢迎程度) 每个产品都有一组具有属性(productvariantid(productid ++ size的组合),productid,大小,可用性,价格的productvariant) 这似乎是产品与产品变体之间的标准父/

    • 问题内容: Book,User和Review说,我正在构建具有复杂模型的应用程序。 评论包含书籍和用户ID。为了能够搜索至少包含一个评论的“图书”,我已将“图书”设置为“评论”的父级,并且具有这样的路由。但是,我还需要找到撰写包含某些短语的评论的用户。 是否可以同时将书和用户作为评论的父级?有没有更好的方法来处理这种情况? 请注意,我无法更改数据建模的方式/不愿意这样做,因为数据已从持久性数据库传

    • 我有一个场景,需要在一种情况下加载所有子值,在另一种情况下加载一些特定的子值。我对这两种情况都使用一个bean,并使用命名查询编写查询。 现在在我的查询2中,我只需要加载字符串A,而不需要加载字符串B和字符串C。我试过使用 但得到以下错误 那么,关于如何继续这方面的任何建议。。

    • 使用JPA(Hibernate)我试图实现以下关系,并想知道其他人是否对最佳方法有任何建议: 基本上是完全不相关的对象,每个对象都有一个公共子对象的集合;在对象模型中实现简单,在数据库中稍微麻烦些! 我确信这一定是常见的事情,但是我很难找到任何示例实现,因为我真的不知道正确的搜索词。 谢谢你的时间!

    • 我在搜索孙子的时候遇到了一些奇怪的弹性搜索行为。我的孙子不能识别每个父文档。当我要求弹性搜索返回父节点的子节点时,它会返回所有可能的命中。然后当我要求归还我那些有大孩子的孩子时,我得到了不正确的结果。有些时候,我没有得到点击或更少。但是当我检查我的孙子的路由和父ID时,我发现他们确实存在于他们的父节点中。但是我不明白为什么我得到的结果不正确。你们中有人遇到过这样的问题吗???我检查了我的代码三次,

    • 我正在建立一个弹性搜索索引,并希望它的行为(返回结果)某种方式。我已经建立了父母/孩子的关系。 我已经用一些“父”文档和一堆父文档设置正确的“子”文档填充了它。 当我使用普通搜索查询搜索内容时,我当然会返回所有匹配的文档。父文档和子文档,但两者之间没有联系。如果我使用has_child筛选器搜索内容,它将正确地搜索子文档,并向我返回匹配的父文档: 问题是,我想搜索孩子,并在一个文档中找回父母和孩子