我想知道如何在neo4j中执行路径查询。例如,我有以下所示的路径的查询:分析Neo4j路径查询
match p=(n)-[r*1..10]->(m)
where
(
n.URI='http://yago-knowledge.org/resource/Jacob_T._Schwartz' OR
n.URI='http://yago-knowledge.org/resource/Anna_Karina'
) AND
filter(x IN r where type(x)=~'.*hasAcademicAdvisor.*') AND
filter(y IN r where type(y)=~'.*isCitizenOf.*') AND
filter(z IN r where type(z)=~'.*participatedIn.*') AND
filter(u IN r where type(u)=~'.*happendedIn.*') AND
filter(v IN r where type(v)=~'.*dealsWith.*')
return p, length(p) order by length(p) desc;
此查询是找到与源节点“http://yago-knowledge.org/resource/Jacob_T._Schwartz”或“http://yago-knowledge.org/resource/Anna_Karina”具有一定的关系的曲线图数据库路径。
我对此查询使用PROFILE命令,下面是我得到的执行计划。
注意,在第5行第5栏的内容太长,所以我把***而不是把实际的内容。
其实,***表示((((((Property(n,URI(0)) == { AUTOSTRING0} OR Property(n,URI(0)) == { AUTOSTRING1}) AND nonEmpty(FilterFunction(r,x,RelationshipTypeFunction(x) ~= /{ AUTOSTRING2}/))) AND nonEmpty(FilterFunction(r,y,RelationshipTypeFunction(y) ~= /{ AUTOSTRING3}/))) AND nonEmpty(FilterFunction(r,z,RelationshipTypeFunction(z) ~= /{ AUTOSTRING4}/))) AND nonEmpty(FilterFunction(r,u,RelationshipTypeFunction(u) ~= /{ AUTOSTRING5}/))) AND nonEmpty(FilterFunction(r,v,RelationshipTypeFunction(v) ~= /{ AUTOSTRING6}/)))
对不起坏格式。
有人能帮我解释一下这个计划吗?提前致谢!!!
太感谢你了,布莱恩。是的,我有我的理由使用正则表达式来匹配关系类型。实际上,在我的应用场景中,我想要在一组节点之间找到路径,以便这些路径包含所有指定的关系。但是,我不关心关系的顺序。这是我想出能够实现我的目标的唯一途径。另外,我同意你关于添加标签和使用性能索引。我会尝试的! – sgao
FWIW,我给出的语法没有指定特定的顺序,只是沿着路径的所有关系都必须是指定类型之一 –
但是,我需要所有关系都出现在最终路径中。 – sgao