如何从中解除多个连接?

时间:2015-02-18 08:26:28

标签: optimization neo4j

我99%完成了我的查询,但现在必须优化它。在下面的查询中,标记Media WITH的{​​{1}}关系target的数量是计算两次。在tag进行第一场比赛,然后在count(r)进行第二场比赛。我想优化查询以传递第一个匹配的计数并将其与每个标记相关联,这样我就不必计算两次这个值。我如何通过2个集合并展开它们?或者,如果有任何其他方法可以节省这个重复的计算,我很乐意听到它。

示例控制台:http://console.neo4j.org/?id=26vqyk

WHERE media-[:WITH]->(target) WITH COUNT(*)

1 个答案:

答案 0 :(得分:1)

为什么先收集标签然后立即放松? ESP。因为你再也不用标签了吗?

一些想法:

MATCH (target:Tag {name:'tagName'})<-[r1:WITH]-(:Media)-[r2:WITH]->(tag:Tag)
WITH count(distinct r2) as tagCounts, count(distinct r1) as mediaCounts, tag, target
ORDER BY mediaCounts DESC LIMIT 100
MATCH (m:Media)-[r:WITH]->(tag)
WITH count(r) as totes, size((m)-[:WITH]->(target)) as both, 
     target, tag.name as tag, mediaCounts, tagCounts
....