我不确定这个标题的措辞是否很好,但不确定该怎么做。我正在使用一些数据填充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个边缘
答案 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