Solr很多与许多自我联合的反向关系

时间:2015-08-12 17:23:30

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

我有数以百万计的法院意见,我想索引。在我们的关系数据库中,每个意见平均引用了大约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更有用,因为要获取最近引用的列表 < / strong>意见非常不可思议。

  3. 在Solr中进行自我加入时是否有任何技巧?我想它甚至都不知道这个概念?

1 个答案:

答案 0 :(得分:1)

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

另一种策略是拥有一个集合,其中每个“文档”都是[引用,引用,日期]集合。然后,您可以单独查询此集合以获取引用/引用不同意见的任何引用,并查询主要内核以获取实际引用。

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