2017-07-07 6 views
-2

Ich würde gerne wissen, wie ich die Knotennamen anstelle der Knoten-IDs in der Java-Konsole zurückgeben kann. Neo4J - Rückgabeknotenname anstelle von ID

enter image description here

Die gewünschte Ausgabe sollte wie folgt aussehen

:

enter image description here

nur ohne all die Informationen, sondern nur mit den Knotennamen (

Die folgende Ausgabe wird in der Konsole angezeigt welche gleich Airportnamen).

Mein Java-Code sieht wie folgt aus:

package com.routesNeo4j; 

import org.neo4j.driver.v1.*; 
import java.util.ArrayList; 
import java.util.List; 

/** 
* Created by e on 11.06.17. 
*/ 
public class Neo4JRouting implements AutoCloseable, Neo4J_Connector { 

    static Driver driver; 


    public Neo4JRouting(String startAirport, String destinationAirport, StatementResult shortestPath) { 

     driver = GraphDatabase.driver("bolt://ec2-13-58-101-13.us-east-2.compute.amazonaws.com:7687", 
       AuthTokens.basic("neo4j", "Einloggen_123")); 

     try(Session session = driver.session()) { 

      shortestPath = session.run("MATCH (a:" + startAirport.toLowerCase() + "), (b:" + destinationAirport.toLowerCase() 
      + "), p = allShortestPaths((a)-[r*1..4]-(b)) UNWIND rels(p) AS rel RETURN nodes(p), sum(rel.weight) " + 
        "AS weight ORDER BY sum(rel.weight)"); 


      List<Record> storeList = storeList(shortestPath); 
      while (shortestPath.hasNext()) { 
       System.out.println(shortestPath.next().toString()); 
      } 
      System.out.println(storeList); 


     } catch (Exception e) { 

      e.printStackTrace(); 

     } 

    } 

    public List<Record> storeList(StatementResult statementResult) { 

     List<Record> list = new ArrayList<>(); 
     while (statementResult.hasNext()) { 

      list.add(statementResult.next()); 

     } 

     return list; 

    } 

    @Override 
    public Driver runDriver(String user, AuthToken basicAuthToken) throws Exception { 
     return null; 
    } 

    @Override 
    public void close() throws Exception { 

    } 

} 

ich mich auf eure Antworten suchen. Danke vielmals!

Antwort

0

Jede Zeile, die Sie zurückgeben, enthält eine Liste von Knoten und ein Gewicht. Das ist, was Sie in Ihrer Anfrage fragen und das bekommen Sie. Sie müssen das Ergebnis also in das gewünschte Format "entpacken".

Paar von Code-Schnipsel zu zeigen, was ich meine:

 StatementResult vResult = vSession.run(aCypher); 

     while (vResult.hasNext()) { 
      Record vRecord = vResult.next(); 

      vMutator.pushNode("row"); 

      for (Pair <String, Value> vListEntry : vRecord.fields()) { 
       process_listentry(vSession, vMutator, vListEntry.key(), vListEntry.value()); 
      } 

      vMutator.popNode(); // row 
     } 

und dann in process_listentry:

private void process_listentry(Session vSession, IHDSMutator vMutator, String vKey, Value vValue) { 
... 
    else if (vValue.type().equals(vSession.typeSystem().NODE())){ 
     vMutator.pushNode(vKey); 
     vMutator.addNode("_id", Long.toString(vValue.asNode().id())); 
     for (String lLabel : vValue.asNode().labels()) { 
      vMutator.addNode("_label", lLabel); 
     } 
     for (String lKey : vValue.asNode().keys()) { 
      Value lValue = vValue.asNode().get(lKey); 
      process_listentry(vSession, vMutator, lKey, lValue); 
     } 
     vMutator.popNode(); 
    } 

... aber es hängt davon ab, was Sie in der Abfrage stellen und muss also auspacken ...

hoffe das hilft, Tom

+0

IHDSMutator <- Was ist das? Wenn ich es ansehe, finde ich kein Paket oder eine Bibliothek dafür. Kannst du bitte Erklären? –

+0

Es ist nur eine Beispielstruktur, die ich verwende, um meine Ergebnisse zurückzugeben. Es ist tatsächlich eine Hierarchische Datenstruktur (HDS), ähnlich einem XML-Dokument. Das ist nicht der Punkt meines Beispiels, der Punkt ist, dass Sie das Ergebnis verarbeiten müssen, das Sie von der Abfrage erhalten, um die tatsächlichen Daten daraus zu extrahieren. In der Tat brauchen Sie nicht einmal eine Struktur, um die Ergebnisse zu behalten, wenn Sie sie nur auf der Konsole drucken wollen. –

Verwandte Themen