嗨,伙计们,我正在编写一个neo4j查询以获得多个跃点。
目前,我的模式是作者- fname、lname和纸质标题。
关系:作者->写了->论文
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结果是相同的,我认为这是不应该的--任何帮助都将不胜感激。
发布于 2018-02-20 19:45:03
编辑
下面是一个不需要事先知道你最有效率的作者(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 papersRANGE(1, SIZE(ns)-1, 2)返回每个Paper节点的索引列表(因为它们有奇怪的索引)。
确保禁用Connect result nodes选项在Browser Settings__中,否则可视化可能会显示结果中没有的额外节点。
https://stackoverflow.com/questions/48892383
复制相似问题