计算一对节点之间的关系数,并将其设置为Neo4J中的参数

计算一对节点之间的关系数,并将其设置为Neo4J中的参数,neo4j,Neo4j,我有一个图,其中一对节点之间可以有几个关系。 我想计算每对节点之间的关系,并将其设置为每个关系的参数 我试过这样的方法: MATCH (s:LabeledExperience)-[r:NextExp]->(e:LabeledExperience) with s, e, r, length(r) as cnt MATCH (s2:LabeledExperience{name:s.name})-[r2:NextExp{name:r.name}]->(e2:LabeledExperien

我有一个图,其中一对节点之间可以有几个关系。 我想计算每对节点之间的关系,并将其设置为每个关系的参数

我试过这样的方法:

MATCH (s:LabeledExperience)-[r:NextExp]->(e:LabeledExperience) 
with s, e, r, length(r) as cnt
MATCH (s2:LabeledExperience{name:s.name})-[r2:NextExp{name:r.name}]->(e2:LabeledExperience{name: e.name})
SET r2.weight = cnt
但这将权重设置为1。 我还尝试:

MATCH ()-[r:NextExp]->() 
    with r, length(r) as cnt
    MATCH ()-[r2:NextExp{name:r.name}]->()
    SET r2.weight = cnt

但这需要花费太多时间,因为有超过90k的关系,并且没有索引(因为不可能将它们放在边上)

由于您的计数方式,它们总是设置为1

当您按
s、e、r
分组时,总是会产生一行。但是如果您为每个
s,e
收集(r),那么您将获得这两个节点之间所有
:nextextsp
关系的集合

此外,用于测量匹配路径中的长度(节点数),不应直接处理关系

匹配关系并将它们放入每对节点的集合中。迭代集合中的每个rel,并设置rel集合的大小

MATCH (s:LabeledExperience)-[r:NextExp]->(e:LabeledExperience) 
WITH s, e, collect(r) AS rels
UNWIND rels AS rel
SET rel.weight = size(rels)