首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j查询多跳

Neo4j查询多跳
EN

Stack Overflow用户
提问于 2018-02-20 18:57:52
回答 1查看 4K关注 0票数 0

嗨,伙计们,我正在编写一个neo4j查询以获得多个跃点。

目前,我的模式是作者- fname、lname和纸质标题。

关系:作者->写了->论文

代码语言:javascript
复制
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;然而,我不认为我的质疑是正确的。每当我改变

代码语言:javascript
复制
:WROTE *1 to :WROTE *1..2

结果是相同的,我认为这是不应该的--任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-20 19:45:03

编辑

下面是一个不需要事先知道你最有效率的作者(Co)写了多少篇论文的问题。它自动确定作者是谁,然后找到他/她的合著者及其合著者。为此,-[:WROTE*..3]-模式是无方向的,使用的上限为3(因为将有3种关系跳到共同作者的共同作者)。通常,如果您想要使合著者达到N的深度,则需要一个(1+(N-1)*2)的上限。

代码语言:javascript
复制
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浏览器中可视化所有感兴趣的合著者及其共同撰写的论文,这应该是可行的:

代码语言:javascript
复制
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节点的索引列表(因为它们有奇怪的索引)。

确保禁用Connect result nodes选项在Browser Settings__中,否则可视化可能会显示结果中没有的额外节点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48892383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档