我正在尝试使用 Neo4j 运行此查询,但运行时间太长(超过 30 分钟,几乎 2500 个节点和 180 万个关系)才能运行:
Match (a:Art)-[r1]->(b:Art)
with collect({start:a.url,end:b.url,score:r1.ed_sc}) as row1
MATCH (a:Art)-[r1]->(b:Art)-[r2]->(c:Art)
Where a.url<>c.url
with row1 + collect({start:a.url,end:c.url,score:r1.ed_sc*r2.ed_sc}) as row2
Match (a:Art)-[r1]->(b:Art)-[r2]->(c:Art)-[r3]->(d:Art)
WHERE a.url<>c.url and b.url<>d.url and a.url<>d.url
with row2+collect({start:a.url,end:d.url,score:r1.ed_sc*r2.ed_sc*r3.ed_sc}) as allRows
unwind allRows as row
RETURN row.start as start ,row.end as end , sum(row.score) as final_score limit 10;
这:Art是标签下有 2500 个节点,这些节点之间存在双向关系,具有称为 的属性ed_sc。所以基本上我试图通过遍历一、二和三度路径来找到两个节点之间的分数,然后对这些分数求和。
有没有更优化的方法来做到这一点?