3

Neo4jバージョン1.8.1を使用して、「暗号化」RESTエントリポイントを使用して多くの関係を挿入しようとしています(クエリは関係を挿入する必要があり、必要な場合にのみ宛先ノードを挿入する必要があります)。この可能性は、http://christophewillemsen.com/streemz/8/importing-initial-data-with-the-neo4j-rest-apiブログ投稿で見つけました。

リレーションシップを1つだけ作成するとうまく機能しますが、いくつか試してみるとすぐに失敗します。

動作している1つの関係を呼び出すために使用される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ステートメントを実行しているようです。

また、パラメータをリストとして作成しようとしましたが、機能しませんでした。

ご協力ありがとうございました

4

4 に答える 4

5

サイファークエリでは常にパラメータを使用してください

rest-batch-operationsを使用して、複数のクエリを実行します。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
   } ]
于 2013-03-25T12:40:05.010 に答える
0

以前はRESTAPIではなく「CypherQueryLanguage」を使用していました。そして私はあなたがこのようにしたいことをします:

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

于 2013-03-24T11:03:14.943 に答える
0

Muhammad Osmanソリューションを使用して、自分に合った1つのクエリを作成しようとしましたが、RESTAPIで別のエラーが発生しました。

私が試したクエリは次のとおりです。

{"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 butSが見つかりました\n \ nここにもっと良いエラーメッセージがあるはずだと思いますか?このクエリをcypher@neo4j.orgに送信してください。\ n \ nNeo4jチーム、ありがとうございます。\ n \ n \ "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 \ "\ n ^"、"例外":" SyntaxException "、" stacktrace ":[...]}

私が理解していることから、Cypherは、最初のCREATEUNIQUEの後にクエリが終了することを期待しています。ただし、Cypherを使用すると、1つのCypherで複数のCREATEを実行できます。複数のCREATEUNIQUEを使用してみませんか?

于 2013-03-25T08:18:37.247 に答える
0

これを試しましたか

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
于 2013-03-26T20:16:46.990 に答える