2015-02-11 342 views
0

我试图匹配一组节点之间的所有路径(达到一定长度)。我可以通过发出以下查询来成功地做到这一点:Neo4j和Cypher语法:匹配组中的所有路径/节点集合

MATCH (n) WHERE ID(n) IN [1, 2, 3, 4, 5] 
MATCH (m) WHERE ID(m) IN [1, 2, 3, 4, 5] 
MATCH paths = allShortestPaths((n)-[*..3]-(m)) 
RETURN paths 

我对结果本身及其速度感到满意。我不明白的是,是否有一种方法来定义一个变量来定义集合[1,2,3,4,5]一次。排序:

x = [1, 2, 3, 4, 5] 
MATCH (n) WHERE ID(n) IN x 
MATCH (m) WHERE ID(m) IN x 
MATCH paths = allShortestPaths((n)-[*..3]-(m)) 
RETURN paths 

这可能吗?我尝试了几种替代方案(使用WITH和AS),但没有运气。

感谢

回答

1

用途:

WITH [1, 2, 3, 4, 5] AS x 

如:

WITH [1, 2, 3, 4, 5] AS x 
MATCH (n) WHERE ID(n) IN x 
MATCH (m) WHERE ID(m) IN x 
MATCH paths = allShortestPaths((n)-[*..3]-(m)) 
RETURN paths 

顺便说一句,似乎是一个回归的Neo4j社区-2.2.0-M03,其导致与上述查询错误。 M02似乎没有问题。

+0

是的,这是我做的。我在这种情况下得到的是: 无法为给定QueryGraph QueryGraph(Set(),Set(IdName(n),IdName(m)),Set(IdName(x)),Selections(Set(Predicate (函数名(函数名(ID),假,矢量(标识符(m))),标识符(x)),谓词(Set(IdName(x)), IdName(X)),在(FunctionInvocation(使用functionName(ID),假的,矢量(标识符(N))),标识符(X))))),表(),()设置集(ShortestPathPattern(有些(IdName (路径)),PatternRelationship(IdName(UNNAMED115),(IdName(n),IdName(m)),BOTH,List(),VarPatternLength(1,Some(3))),false))) – redsk 2015-02-11 18:47:58

+0

Neo.DatabaseError。 Statement.ExecutionFailure – redsk 2015-02-11 18:49:46

+0

您使用的是哪个版本的neo4j? – cybersam 2015-02-11 19:29:58

相关问题