我99%完成了我的查询,但现在必须优化它。在下面的查询中,标记Media
和 WITH
的{{1}}关系target
的数量是计算两次。在tag
进行第一场比赛,然后在count(r)
进行第二场比赛。我想优化查询以传递第一个匹配的计数并将其与每个标记相关联,这样我就不必计算两次这个值。我如何通过2个集合并展开它们?或者,如果有任何其他方法可以节省这个重复的计算,我很乐意听到它。
示例控制台:http://console.neo4j.org/?id=26vqyk
WHERE media-[:WITH]->(target) WITH COUNT(*)
答案 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
....