gpt4 book ai didi

java - 使用 RestCypherQueryEngine 参数时出错

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:40 25 4
gpt4 key购买 nike

我使用neo4j-rest-binding API进行开发,但是在使用RestCypherQueryEngine的参数时遇到问题。

QueryResult<Map<String,Object>> result = engine.query("MATCH (n:{label}) RETURN n", MapUtil.map("label", label));

label是我在map结构中分配的参数,但是有错误:

org.neo4j.rest.graphdb.RestResultException: Invalid input '{': expected whitespace or an identifier (line 1, column 10)
"MATCH (n:{label}) RETURN n"
^ at
SyntaxException
org.neo4j.cypher.internal.compiler.v2_0.parser.CypherParser$$anonfun$parse$1.apply(CypherParser.scala:51)
org.neo4j.cypher.internal.compiler.v2_0.parser.CypherParser$$anonfun$parse$1.apply(CypherParser.scala:41)
...

我可以使用另一种方法来解决这个问题:

QueryResult<Map<String,Object>> result = engine.query("MATCH (n:" + label +") RETURN n", null);

但是当我想传递多个参数时,我认为上面的方法不合适。

最佳答案

:{ 是语法错误。正如异常告诉您的那样,Cypher 期望冒号后有一个标识符 - 即标签的名称 - 并且标识符(如大多数语言中一样)不能包含括号。

听起来您对标签和参数之间的区别感到困惑:

以下内容是有效的:MATCH (n:employee{name:"foo"}) 这里,employeelabel 。您可以应用任意数量的由冒号分隔的标签。 {name:"foo"} 是一个参数 block - 请注意,它包含您要匹配的字段和值。因此,此查询将返回所有标记为 employeename 值为“foo”的节点。 MATCH (n:employee:custodian{name:"foo"}) 将为您提供名为“foo”的托管人的所有员工。

如果您想要所有节点的name值为“foo”,请使用MATCH (n {name:"foo"})(注意没有冒号)。

编辑(回应您的评论)您的查询与您所引用的示例中的查询之间有两处区别,start n=node({id}) return n 显然是一个 START 子句,do very different things并且与 MATCH 子句具有不同的语法规则:({id)} 中的 id 只是一个要在索引中查找的值。在 MATCH 子句中,{ } block 中的内容是键值对,如上所述。在参数 block (即一组大括号)内,冒号用于分隔键和值。 MATCH 子句中括号外部的冒号用于分隔 labels这是完全不同的事情。

第二个区别是,如果您仔细观察 START 子句,会发现有一个括号将冒号与方括号分开。 :{ 永远不会好,这就是您的错误消息告诉您的内容。

关于java - 使用 RestCypherQueryEngine 参数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23753969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com