Path Neo4J/Cypher:是否可以在where子句中过滤路径的长度?

Path Neo4J/Cypher:是否可以在where子句中过滤路径的长度?,path,neo4j,cypher,where,Path,Neo4j,Cypher,Where,假设我们有一个简单的模式: p=(a)-[r]-(b) 其中节点a和b在where子句中已经设置了它们自己的属性(例如a:Movie和a.title=“矩阵”和b:Movie)。 我想在WHERE子句中添加另一个条件,如 LEGHT(p) =2 OR LENGTH(p)>6 (我知道语法不正确) 据我所知,可以在MATCH子句中使用语法[r*min..max]指定路径的长度,但这不包括我要查找的情况 任何帮助都将不胜感激。=)这对你有用吗 MATCH p=(a)-[r*2..]-(b)

假设我们有一个简单的模式:

p=(a)-[r]-(b)
其中节点a和b在where子句中已经设置了它们自己的属性(例如a:Movie和a.title=“矩阵”和b:Movie)。 我想在WHERE子句中添加另一个条件,如

LEGHT(p) =2 OR LENGTH(p)>6
(我知道语法不正确)

据我所知,可以在MATCH子句中使用语法[r*min..max]指定路径的长度,但这不包括我要查找的情况


任何帮助都将不胜感激。=)

这对你有用吗

MATCH p=(a)-[r*2..]-(b)
WHERE LENGTH(r) = 2 OR LENGTH(r) > 6
RETURN p

请注意,对于大型数据库,此查询可能需要很长时间,或者无法完成,因为
MATCH
子句没有设置路径长度的上限。

是的,这在neo4j中确实有效,正如您指定的那样

样本数据:

create (a:Foo)-[:stuff]->(b:Foo)-[:stuff]->(c:Foo);
然后这个查询:

MATCH p=(x:Foo)-[:stuff*]->(y:Foo) 
WHERE length(p)>1 RETURN p;

只返回
a->b->c
中的两步路径,而不是一步路径(
a->b
b->c

我已经用简单的电影db Neo4J尝试过这种方法。尽管它只有有限数量的节点/关系,但它仍然停留在“执行查询…”上。我在寻找更可靠的东西。您应该对源节点和目标节点施加硬约束。如果您通常这样做,比如
MATCH(a)-[b]->(c)
,那么您的查询必须匹配整个数据库中的每个可能路径。这个数字会非常高,你的查询会花费很长时间。是的,这应该行得通。这里的问题是,设置硬约束将取决于用户,我无法预见它是否足够聪明,可以这样做=),因此基本上你的问题得到了回答。您可以按预期的方式筛选路径,但在使此查询运行良好方面存在相关问题。你可以考虑使用<代码> SuthTestPosiy()/Too.tooi,假设……虽然它不像我希望的那样去了)谢谢你,这就是我所害怕的。我正在创建一个UI来构建密码查询,并将路径的“legth”属性放在其他属性中(例如节点标签、关系类型等)。用户应该有可能决定路径长度是否应为=,=指定数量。我现在确实认为我必须重新思考。。。