2014-07-10 67 views
1

查询,在V2.0.3工作现在升级到Neo4j的V2.1.2后,Cypher支架查询不起作用

START n = NODE(67635) 
MATCH (n:publication) 
WHERE n.status <> 0 
OPTIONAL MATCH (n)-[re:contains|can_use]->(e) 
WHERE (e:article) AND (e.status <> 0 AND re.status <> 0)  
WITH n, e 
ORDER BY e.created DESC 
WITH n, COLLECT(e) AS ce  
RETURN n, ce[0..10], LENGTH(ce) 

,在V2.1.2我得到了同样的查询以下错误:

Cannot match on a pattern containing only already bound identifiers (line 2, column 1)\n\"MATCH (n:publication)\"\n ^\n [exception] => SyntaxException\n [fullname] => org.neo4j.cypher.SyntaxException\n [stacktrace] => Array\n  (\n   [0] => org.neo4j.cypher.internal.compiler.v2_1.SemanticChecker$$anonfun$check$1.apply(SemanticChecker.scala:40)\n   [1] => org.neo4j.cypher.internal.compiler.v2_1.SemanticChecker$$anonfun$check$1.apply(SemanticChecker.scala:40)\n 

我知道如何解决它,但我想避免在整个项目中修复查询,如果可能的话。 任何其他解决方案?

回答

1

你可以配置你的Neo4j数据库使用旧的Cypher编译器/解析器,例如CYPHER 2.0

你可以做到这一点每个查询或在全球范围内neo4j.properties

cypher_parser_version=CYPHER 2.0 
0

重构到这一点:

MATCH (n:publication) 
WHERE ID(n)=67635 AND n.status <> 0 
OPTIONAL MATCH (n)-[re:contains|can_use]->(e) 
WHERE (e:article) AND (e.status <> 0 AND re.status <> 0)  
WITH n, e 
ORDER BY e.created DESC 
WITH n, COLLECT(e) AS ce  
RETURN n, ce[0..10], LENGTH(ce) 

还要注意的是匹配多个关系类型的,现在需要一个冒号为每种类型的前缀:

old: OPTIONAL MATCH (n)-[re:contains|can_use]->(e) 
new: OPTIONAL MATCH (n)-[re:contains|:can_use]->(e)