使用Neo4j版本1.8.1,我试图利用"cypher" REST入口点插入许多关系(查询必须插入关系,只有在必要时才插入目标节点)。我是通过http://christophewillemsen.com/streemz/8/importing-initial-data-with-the-neo4j-rest-api的一篇博文发现这种可能性的。
如果我只创建一个关系,它工作得很好,但当我尝试多个关系时,它就失败了。
用于调用一个正在工作的关系的JSON:
{"query":"START n=node:node_auto_index(UserId='21000001') CREATE UNIQUE n-[:KNOWS{Label:'Friend'}]-(m{Users})", "params":{"Users" : [{"UserId":"21000003"}]}}
我试图建立2种失败的关系:
{"query":"START n=node:node_auto_index(UserId='21000001') CREATE UNIQUE n-[:KNOWS{Label:'Friend'}]-(m{Users})", "params":{"Users" : [{"UserId":"21000002"},{"UserId":"21000003"}]}}
REST调用返回的错误是:
{
"message": "The pattern CreateUniqueAction(List(m-[:`LOVES`]-n)) produced multiple possible paths, and that is not allowed",
"exception": "UniquePathNotUniqueException",
"stacktrace": "..."
}
不知道我的查询是如何在Neo4j内转换的,很难找到我必须如何改变我的查询。
我认为Neo4j会做2个查询,但错误似乎是它正在为其他节点端做一种IN语句。
我也试过把params作为一个列表,但是没有成功。
谢谢你的帮助
请确保在密码查询中始终使用参数
使用rest-批处理操作执行多个查询,参见http://docs.neo4j.org/chunked/milestone/rest-api-batch-ops.html
POST `http://localhost:7474/db/data/batch`
Accept: application/json
Content-Type: application/json
[ {
"method" : "POST",
"to" : "/cypher",
"body" : {
"query" : "START n=node:node_auto_index(UserId={userId1}), m=node:node_auto_index(UserId={userId2}) CREATE UNIQUE n-[r:KNOWS{Label:{label}}]-m",
"params" : {"userId1":"21000001", "userId2":"21000002","label":"Friend"}
},
"id" : 0
},
{
"method" : "POST",
"to" : "/cypher",
"body" : {
"query" : "START n=node:node_auto_index(UserId={userId1}), m=node:node_auto_index(UserId={userId2}) CREATE UNIQUE n-[r:KNOWS{Label:{label}}]-m",
"params" : {"userId1":"21000003", "userId2":"21000005","label":"Friend"}
},
"id" : 1
} ]
我曾经使用"Cypher查询语言"而不是REST API。然后我做你想做的事情,像这样:
START n=node:node_auto_index('UserId:21000001'),m=node:node_auto_index('UserId:21000002 OR UserId:21000003')
CREATE UNIQUE n-[r:KNOWS{Label:'Friend'}]-m
RETURN r
你可以检查这个:http://docs.neo4j.org/chunked/1.8/cypher-query-lang.html
对于Rest API,您可以查看此URL: http://docs.neo4j.org/chunked/1.8/rest-api.html
我尝试使用Muhammad Osman解决方案并构建一个适合我的查询,但我在REST API中遇到另一个错误。
我尝试的查询是:
它给我的错误是:{"query":"START n=node:node_auto_index('UserId:21000001'), m=node:node_auto_index('UserId:21000002') CREATE UNIQUE n-[r:KNOWS{Label:'Friend'}]-m START n1=node:node_auto_index('UserId:21000003'), m1=node:node_auto_index('UserId:21000005') CREATE UNIQUE n1-[r1:KNOWS{Label:'Follow'}]-m1", "params":{}}
{"消息":"字符串匹配的正则表达式
$' expected but
S'发现nn认为我们应该有更好的错误信息在这里?帮助我们发送这个查询到cypher@neo4j.org.n n谢谢你,Neo4j团队。nn"START n=node:node_auto_index('UserId:21000001'), m=node:node_auto_index('UserId: 21000003') CREATE UNIQUE n-[r:KNOWS{Label:'Friend'}]-m START n1=node:node_auto_index('UserId:21000003'), m1=node:node_auto_index('UserId:21000005') CREATE UNIQUE n1-[r1:KNOWS{Label:'Follow'}]-m1"n ^","异常":"SyntaxException","加":[…]}
根据我的理解,Cypher期望查询在第一个CREATE UNIQUE之后结束。然而,Cypher允许我们在一个Cypher中执行多个CREATE。
你试过了吗
START n=node:node_auto_index('UserId:21000001'),m=node:node_auto_index('UserId:21000002'),
n1=node:node_auto_index('UserId:21000003'),m1=node:node_auto_index('UserId:21000005')
CREATE UNIQUE n-[r:KNOWS{Label:'Friend'}]-m ,n1-[r1:KNOWS{Label:'Follow'}]-m1