【问题标题】:SOLR many to many with extra column mapSOLR 多对多,带有额外的列映射
【发布时间】:2019-11-14 15:22:01
【问题描述】:

是否可以用额外的列存储多对多关系?

这是一种情况:

stock_item solr core 是包含有关库存项目的所有内容(如名称、价格、描述...)的核心。

它取自stock_item 实体。该实体(除了在这个问题中不重要的其他属性之外)与带有 stock_item_group 实体的额外列的多对多关系。库存项目组是用于将一些 stock_item 存储在一起的实体(例如,可能存在“复活节”库存项目组,其中仅包含与复活节有共同点的库存项目)。 简单的多对多关系很容易插入到 solr 中(stock_item 核心持有 stock_item_group ids 列表的属性)。但是,还有那一列。该列表示 stock_item_group 中库存项目的顺序(所以复活节兔子将是第一个,复活节彩蛋秒,...)。

我不知道如何将它插入到 solr 中(是否可以将地图数组存储到 stock_item 核心中?)

wnated 行为是查询,我只指定 stock_item_group id,solr 返回由该额外列排序的 stock_items 列表。

【问题讨论】:

  • 我很难解析你真正想要的问题。通常,您必须围绕特定项目(例如库存项目)构建文档,然后使用每个文档的多对多链接中的数据来丰富它,但是如果没有很好地了解您的实际问题,就很难说.
  • 我的问题哪一部分不清楚,我可以修改问题。我有 M:N(两个实体)我连接了其他信息(它们连接在一起的顺序)。在 M 实体上,我有一个 solr 核心(因此我可以对其进行查询、获取等)。如果没有关系,我只会保存连接该项目的 N 个实体的 id 数组。然后我会查询那个 M 核心,告诉我想要这个核心的记录,这些记录保存了 N 个实体的一些 id。那会很容易。但我有那个额外的订单栏。所以我得说,给我按那个附加列(它的 int)排序的所有核心记录。
  • 应该澄清解释问题的整个段落。添加它在您的数据库中的外观示例,以及查询应该回答什么的示例。初步猜测是可以使用动态字段名进行排序,但不了解问题就很难说

标签: solr


【解决方案1】:

听起来您正在跟踪(组)存在和排序顺序。如果库存项目组的数量不太多,您可以定义两个动态字段模式:

  • group_included_[id](作为布尔值)
  • group_order_[id](作为整数)

然后您只需过滤包含的内容并按顺序排序。如果您愿意,也可以像往常一样包含多值字段。您甚至可以跳过它,只检查 group_order_[id] 字段中是否存在任何值,但性能会更差。

【讨论】:

  • 感谢您的回复。我感觉合理。但我想出了另一种方法。如果我为 Stock itemgroup 创建另一个核心会怎样。该组将保存按该订单排序的库存商品 ID 列表。我不确定我是否可以从那个新核心连接到堆栈项目核心。因此,如果我在库存项目组上询问 solr,它将返回库存项目核心的有序列表。那可能吗?如果是这样,哪种方法的性能更好?
  • 我不确定我是否理解您的替代解决方案。 SO 不是深入讨论替代方案的最佳场所。 Solr 用户邮件列表可能会更好。
  • 我们实现了(有点)你的方式。我们在组中使用了一个动态字段来保存订单值(我们尝试使用 2 列,但在我们的案例中性能差异并不那么重要,因此我们决定只使用一个字段)。谢谢你的建议。
猜你喜欢
  • 1970-01-01
  • 2012-05-12
  • 2012-10-31
  • 1970-01-01
  • 2011-12-05
  • 2017-01-12
  • 2017-01-03
  • 2019-11-24
  • 2013-02-15
相关资源
最近更新 更多