我有一个拥有超过200万个节点的Graph数据库。我有一个应用程序,它采用社交图并对其进行一些推断。作为算法的一个步骤,我必须获得两个连接节点的关系[:friends]的所有可能组合。目前,我有一个查询,看起来像: 匹配(a) - [:朋友] - (c),(b) - [:朋友] - (d)其中id(a)= {ida}和id(b)= {idb}返回不同的c作为第一个, d作为第二个
所以,我已经知道节点a
和b
,我希望获得可以从a
和b
的朋友那里获得的所有可能对。
这显然是一个非常缓慢的操作。我想知道是否有更有效的方法在neo4j中获得相同的结果。也许添加索引可能有帮助?欢迎任何想法/线索!
示例
节点a
有朋友:x
,y
节点b
有朋友:g
,h
,i``
Then the result should be:
x ,
g
x ,
h
X ,
I
{Ý{1}}克,
{Ý{1}} {ħ{1}} {Ý{1}} i`
答案 0 :(得分:1)
如果您还没有,则应使用标签来加速查询,这可能如下所示:
MATCH (p1:Person)-[:FRIEND]->(p3:Person),(p2:Person)-[:FRIEND]->(p4:Person)
WHERE ID(p1) = 6 AND ID(p2) = 7
RETURN p3 as first, p4 as second
显然,这将依赖于您使用:Person
标签创建节点。
普通节点有多少朋友?
答案 1 :(得分:0)
我不会使用两种模式,只使用一种IN
运算符。
MATCH (p:Person)-[:FRIEND]->(friend:Person)
WHERE id(p) IN [1,2,3]
RETURN p, collect(friend) as friends
然后你没有交叉产品,你也可以很好地回报每个人的收集。