Graph 多个匹配语句出现问题,结果没有有效模式的行
我试图用Neo4j创建一个带有代理和“知道”的图表 关系Graph 多个匹配语句出现问题,结果没有有效模式的行,graph,neo4j,cypher,Graph,Neo4j,Cypher,我试图用Neo4j创建一个带有代理和“知道”的图表 关系 Match (a:AGENT {name:'a'}) Match (e:AGENT {name:'e'}) Match d1 = (a) -[r1:KNOWS]-> (e) Match d2 = (a) -[r1:KNOWS]-> (x) -[r2:KNOWS]-> (e) Return d2 鉴于: d1独立运行,不返回任何行。 d2 ran独立返回一个有效结果 当我运行上面的代码时(使用这两个语句),结果是没有行。
Match (a:AGENT {name:'a'})
Match (e:AGENT {name:'e'})
Match d1 = (a) -[r1:KNOWS]-> (e)
Match d2 = (a) -[r1:KNOWS]-> (x) -[r2:KNOWS]-> (e)
Return d2
鉴于:
d1独立运行,不返回任何行。
d2 ran独立返回一个有效结果
当我运行上面的代码时(使用这两个语句),结果是没有行。为什么d2受到d1的影响而没有行
我是cypher和neo4j的新手,请帮忙
以下是在neo4j官方控制台上设置的数据库:
你可以这样试试
MATCH d2=(a:AGENT { name:'a' })-[r1:KNOWS]->(x)-[r2:KNOWS]->(e:AGENT { name:'e' })
optional match d1 = (a) -[r:KNOWS]-> (e)
RETURN d2
这就是您所需要的吗?
d1
不返回任何数据,因为从a
到e
没有单跳路径。由于所有匹配项都不是可选的,因此整个查询不会返回任何数据
这将导致d1找到匹配项
match (a:AGENT {name:'a'})
, (e:AGENT {name:'e'})
, d1 = (a) -[r1:KNOWS*..2]-> (e)
return d1
这是您的原件,只需稍作修改即可返回数据
match (a:AGENT {name:'a'}), (e:AGENT {name:'e'})
, d2 = (a) -[r1:KNOWS]-> (x) -[r2:KNOWS]-> (e)
optional match d1 = (a) -[r1:KNOWS]-> (e)
return d2
match(a:AGENT{name:'a'}),(e:AGENT{name:'e'})-在match中使用逗号会影响性能。此查询确实有效,但我要找的是有一个查询可以找到两个代理之间的最短路径。我开始在脚本中实现一个逻辑,调用查询以检查有效输出,并按d1、d2、d3的顺序调用密码。。。。(d1=1度连接)。让我知道是否有更好的方法,以及是否可以使用单个密码查询而不是尝试d1、d2、d3、d4。提前感谢:)如果您只是查找两个代理之间的所有最短路径,我将使用
allshortestpath
<代码>匹配(a:AGENT{name:'a'}),(e:AGENT{name:'e'}),p=allshortestpath(a-[:KNOWS*.3]->e)返回p,长度(p)为度。.3
允许您设置代理之间的最大度数。非常好!这很有魅力!谢谢你的帮助,戴夫,这确实是一种更干净、更高效的方法:)