【问题标题】:Solr many to many self join relatiohship with reverse relationshipSolr 具有反向关系的多对多自连接关系
【发布时间】:2015-08-13 03:34:50
【问题描述】:

我有数以百万计的法庭意见要编入索引。在我们的关系数据库中,每个意见平均引用大约 30 个其他意见,使用自连接表示 A 引用 B、B 引用 C 等。在数据库中,可以从任一方向查询这些。所以你可以说:

该意见引用了哪些意见?

或者:

引用了哪些观点?

两者的平均数相同,因为一个与另一个相反。但范围差异很大。在第一种情况下,大多数意见最多有 100 次外向引用其他意见,平均约为 30 次。

在第二种情况下,some opinions have nearly 30,000 inbound citations,因为它们被引用了很多次。 (而且这个数字每天都在增长!)

我需要做的是索引项目,以便它们可以通过以下方式查询:

cited_by:23

(大约 30 个结果,通常最多 100 个左右。)

或者:

cites:23

(0 到大约 30,000 个结果)

我很确定我需要为此使用多值字段。但我的问题是:

  1. 我只想从cites 方向索引它。也就是说,我不想从我的数据库中提取 30k 个项目来索引单个项目,并且我不想每次重新引用该项目时都更新它,这种情况每天都会发生很多次。

  2. 我希望能够从任一方向查询此内容。事实上,能够查询cited_by 比查询cites 更有用,因为获得最近的引用列表 一个意见是相当不可思议的.

  3. 在 Solr 中进行自联接时是否有任何技巧需要了解?我猜它甚至不知道这个概念?

【问题讨论】:

    标签: solr many-to-many schema data-modeling self-join


    【解决方案1】:

    Solr 并不是很适合连接(正如您所提到的),但是还有其他解决此类问题的方法。虽然提取 30k 行来索引单个项目可能很广泛,但您可以在引用到达时使用 Atomic Updates support to add single values to multi-valued fields。话虽如此 - 多值字段中的 30k 值偏大,因此您只需进行测试以查看可能出现的任何性能问题(因为索引的其余部分也会影响)。

    另一种策略是拥有一个集合,其中每个“文档”都是一个 [cites, quoted_by, date] 集。然后,您可以自行查询此集合以获取已引用/引用不同意见的任何参考文献,并查询实际参考文献的主要核心。

    只要集合存在于同一服务器上,您就可以在核心之间加入 - 如果您只需要其中一个的值(这意味着 Solr 返回的所有值都必须存在于同一个核心中,Solr 不会执行连接,它从连接的两侧获取值)。

    【讨论】:

    • 不错。我认为原子更新可能是一种很好的技术,但我一直在与同事交谈,他们说我应该将cites 数据保留在 Solr 中,并使用它来双向使用。我没有玩过多值字段,但显然可以进行cites:23-type 查询(0 到 30,000 个结果),我只需获取 cites 字段的值即可获得其他方向(0 到 100 个结果)。
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 2012-06-15
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多