Neo4J无效输入'(':预期标识符字符,空格,NodeLabel

时间:2014-01-06 12:55:24

标签: java servlets neo4j cypher

我刚刚将我的Cypher查询从1.8.2版移到2.0版,而这一段Cypher代码失败了

    start n=node(*) match p=n-[r:OWES*1..200]->n 
where  HAS(n.taxnumber) AND NOT(n IN nodes(p)[1..-1]) 
return extract(s in relationships(p) :s.amount), 
extract(t in nodes(p) :ID(t)), length(p) ;

我在ID(t)上说错误

SEVERE: Servlet.service() for servlet [SeeTheResults] in context with path [/DebtSolutions] threw exception
Invalid input '(': expected an identifier character, whitespace, NodeLabel, '.', node labels, '[', "=~", IN, IS, '*', '/', '%', '^', '+', '-', '<', '>', "<=", ">=", '=', "<>", "!=", AND, XOR, OR, WHERE, '|', ')' or ',' (line 1, column 174)
"start n=node(*) match p=n-[r:OWES*1..200]->n where  HAS(n.taxnumber) AND NOT(n IN nodes(p)[1..-1]) return extract(s in relationships(p) :s.amount), extract(t in nodes(p) :ID(t)), length(p) ;"
                                                                                                                                                                              ^

错误指向id(t)。

在版本1.8.2上,查询是

start n=node(*) match p=n-[r:OWES*1..200]->n 
where  HAS(n.taxnumber) [1..-1]) 
return extract(s in relationships(p) :s.amount), 
extract(t in nodes(p) :ID(t)), length(p) ;

因为1.8.2不支持AND NOT(n IN节点(p)[1 ..- 1]),如果我从2.0版本移动这部分,它会以同样的方式失败。 该图显示了OWE公司与关系属性AMOUNT之间的关系,即多少。

1 个答案:

答案 0 :(得分:2)

我在1.8的另一个问题中更新了答案。

如果您将查询移至2.0,则必须使用:替换提取,过滤等中的|

start n=node(*) match p=n-[r:OWES*1..200]->n 
where  HAS(n.taxnumber) AND NOT(n IN nodes(p)[1..-1]) 
return extract(s in relationships(p) | s.amount), 
       extract(t in nodes(p) | ID(t)), length(p)