Neo4j获得相关团体

时间:2012-06-15 14:00:19

标签: neo4j

我不确定这个标题的措辞是否很好,但不确定该怎么做。我正在使用一些数据填充Neo4j数据库。

数据主要来自我对成对用户的数据。用户之间存在百分比关系,例如:

   80
A ---> B

但反向关系并不相同:

   60
A <--- B

我可以把两种关系放进去,但我认为我可以做的是使用平均值:

   70
A <--> B

但我愿意接受这方面的建议。

我想在Neo4j中做的是获取相关用户组。因此,例如,我想获得一组具有平均%关系&gt;的用户。 50.所以,如果我们有:

      A
40  /   \  60
   B --- C ------ D
     20      70

我们会找回一个子集,例如:

      A
        \  60
         C ------ D
             70

我不知道该怎么做。另一件事是我很确定它不可能从任何其他节点到达任何节点,我认为它是脱节的。比如几个大图。但我希望能够获得上述所有内容,即使某些节点组与其他节点完全分开。

作为数字的概念,将有大约100,000个节点和550,000个边缘

2 个答案:

答案 0 :(得分:2)

一些想法。

首先,如果你的图表没有连接就好了,但你需要一些方式来访问你想要分析的每个组件。在Neo4j中的断开连接的图形中,这意味着Lucene索引,一些保存节点或关系id的外部“索引”,或者迭代DB中的所有节点或关系(这很慢,但您的问题可能需要)。 / p>

其次,虽然我不了解您的域名,但要意识到坚持使用原始表示法和权重可能会很好。 Neo没有无向边(尽管你可以忽略边缘方向),稍后你可能需要这些数据。 OTOH,你的修改采用权重的平均值确实简化了你的分析。

第三 - 根据图表的大小和特征,这可能会非常慢。听起来你想要从边缘构建的子图中所有连接的组件,权重大于50. AFAIK,需要对数据库进行O(N)操作,其中N是边数DB。您可以迭代数据库中的所有边,根据权重进行过滤,然后从那里进行聚类。

使用Gremlin / Groovy,你可以很容易地做到这一点。查看Gremlin docs

在插入数据时,另一种方法可能是某种迭代群集。在我看来,这可能是一个重要的真实字性能改进,虽然它没有绕过O(N)的必要性。

答案 1 :(得分:1)

类似http://tinyurl.com/c8tbth4之类的内容可能适用于此处吗?

start a=node(*) match p=a-[r]-()-[t]-() where r.percent>50 AND t.percent>50 return p, r.percent, t.percent