大家好,我正在尝试编写一个neo4j查询来获取多个跃点。
目前我的架构是 作者 - fname,lname& 论文 - 标题
关系:作者 - > WROTE - >纸
MATCH (a:Author)-[:WROTE]->(p:Paper)
WITH a as auth1, count(p.title) as count1
MATCH (auth1) -[:WROTE *1]->(p2:Paper),
(auth2)-[:WROTE *1]->(p2)
WHERE count1 > 7
RETURN DISTINCT auth1.fname, auth1.lname, auth2.fname, auth2.lname
我想要做的是找到每个人都与我的作者相关,他的论文写得最多 - 首先是1跳,然后是2个跳等等。我知道论文最多的作者有8个写,所以为什么我的计数> 7;但我不认为我的查询是对的。每当我改变
:WROTE *1 to :WROTE *1..2
结果是相同的,我认为他们不应该 - 任何帮助将不胜感激
答案 0 :(得分:1)
[EDITED]
下面是一个查询,不需要事先知道你最有成效的作者(co)写了多少篇论文。它会自动确定作者是谁,然后找到他/她的所有共同作者及其共同作者。为此,-[:WROTE*..3]-
模式是非定向的,并使用3的上限(因为将有3个关系的跃点到达共同作者的共同作者)。通常,如果您希望共同作者的深度为N,则需要(1+(N-1)*2)
的上限。
MATCH (auth1:Author)-[:WROTE]->(p:Paper)
WITH auth1, COUNT(p) AS count1
ORDER BY count1 DESC LIMIT 1
MATCH (auth1)-[:WROTE]->(:Paper)-[:WROTE*..3]-(auth2:Author)
RETURN DISTINCT auth1.fname, auth1.lname, auth2.fname, auth2.lname;
此外,如果你想在neo4j浏览器中想象所有感兴趣的共同作者及其共同撰写的论文,这应该有效:
MATCH (auth1:Author)-[:WROTE]->(p:Paper)
WITH auth1, COUNT(p) AS count1
ORDER BY count1 DESC LIMIT 1
MATCH path=(auth1)-[:WROTE]->(:Paper)-[:WROTE*..3]-(auth2:Author)
WITH auth1, auth2, NODES(path) AS ns
RETURN DISTINCT auth1, auth2, [i IN RANGE(1, SIZE(ns)-1, 2) | ns[i]] AS papers
RANGE(1, SIZE(ns)-1, 2)
返回每个Paper
中path
个节点的索引列表(因为它们有奇数索引)。
确保禁用Connect result nodes
中的Browser Settings
选项,否则可视化可能会显示结果中没有的额外节点。