2017-12-19 4 views
0

Ich habe eine komplexe Anfrage, die perfekt in Neo4j Browser funktioniert, die ich über API Rest verwenden möchte, aber es gibt Klauseln, die ich nicht bewältigen kann.Wie verwendet man Klauseln mit API REST Neo4J?

Die Syntax sieht so aus:

MATCH p =() - [*] -> (node1)

WHERE ...

MIT ...

...

.

FOREACH ... SET ...

Ich habe die Abfrage mit Transactional Cyper erstellt, wie ich von @cybersam vorgeschlagen wurde, aber es gelingt mir nicht, mehr als eine Klausel zu verwenden.

Um eine exemle zu geben, wenn ich die Aussage in einer Zeile schreiben:

:POST /db/data/transaction/commit { 

    "statements": [ 
    { 
     "statement": "MATCH p = (m)-[*]->(n:SOL {PRB : {PRB1}}) WHERE nodes (p) 
MATCH q= (o:SOL {PRB : {PRB2}} RETURN n, p, o, q;", 

"parameters": {"PRB1": "Title of problem1", "PRB2": "Title of problem2"} 
    } ], 

"resultDataContents": ["graph"] } 

Ich werde erhalten:

{ "Ergebnisse" [] "Fehler": [{“ code ":" Neo.ClientError.Statement.SyntaxError "," message ": Ungültige Eingabe 'R': erwartetes Leerzeichen, Kommentar, ')' oder Beziehungsmuster (Zeile 1, Spalte 90 (Offset: 89)) \ r \ n \ "MATCH p = (m) - [*] -> (n: SOL {PRB: {PRB1}}) WHERE Knoten (p) MATCH q = (o: SOL {PRB: {PRB2}} RETURN n, p, o, q; \ r \ n^"}]}

Aber wenn ich es in mehreren Zeilen setzen,:

:POST /db/data/transaction/commit { 

"statements": [ 
    { 
     "statement": "MATCH p = (m)-[*]->(n:SOL {PRB : {PRB1}}) 
WHERE nodes (p) 
MATCH q= (o:SOL {PRB : {PRB2}} 
RETURN n, p, o, q;", 

"parameters": {"PRB1": "Title of problem1", "PRB2": "Title of problem2"} 
    } 
    ], 

    "resultDataContents": ["graph"] 
} 

es heißt:

{ "Ergebnisse" [] "Fehler": [{ "Code":“ Neo.ClientError.Request.InvalidFormat " "message":" Kann nicht Anfrage deserialisieren: Illegal unquoted Zeichen ((CTRL-CHAR, Code 10)): hat unter Verwendung von umgekehrten Schrägstrich zu entkommen, um in string Wert \ n enthalten sein, um [Quelle: HttpInputOverHTTP @ 41fa906c; Leitung: 4, Spalte: 79] "}]}

Bitte, ich brauche deine Hilfe

Alex

Antwort

1

die Transaction Cypher HTTP API verwenden, können Sie nur die gleiche Cypher Anweisung an die API übergeben .

, hier

von this section of the doc zu zitieren ist ein Beispiel für den einfachsten Weg, dies zu tun:

Beginne und begehe eine Transaktion in einer Anfrage Wenn keine Notwendigkeit besteht, eine Transaktion über mehrere HTTP-Anfragen hinweg offen zu halten, kannst du eine Transaktion starten, Anweisungen ausführen und mit nur einer einzigen HTTP-Anforderung committen.

Beispiel Anfrage

  • POST http://localhost:7474/db/data/transaction/commit
  • akzeptieren: application/json; charset=UTF-8
  • Content-Type: application/json

    { 
        "statements" : [ { 
        "statement" : "CREATE (n) RETURN id(n)" 
        } ] 
    } 
    

Beispiel Antwort

  • 200: OK
  • Content-Type: application/json

    { 
        "results" : [ { 
        "columns" : [ "id(n)" ], 
        "data" : [ { 
         "row" : [ 6 ], 
         "meta" : [ null ] 
        } ] 
        } ], 
        "errors" : [ ] 
    } 
    
+0

Also sollte ich jeden Teil des Antrags in einer bestimmten Aussage teilen? Wie würden die Aussagen miteinander verknüpft und mit den analysierten Daten verbunden? – Houngan

+0

Sie übergeben Ihre gesamte Aussage (in Ihrem Beispiel haben Sie nur eine, bestehend aus mehreren Klauseln). – cybersam

+0

Mit Transactional Cypher funktioniert es auch nicht, wenn ich mehr als einen Clause verwende. Lesen Sie das Upgrade dieser Frage oben ... – Houngan

Verwandte Themen