2017-07-07 13 views
-2

JavaコンソールでノードIDの代わりにノード名を返す方法を知りたい。Neo4J - IDの代わりにノード名を返す

次の出力がコンソールに表示されています(ただ、すべての情報なしだけノード名で

enter image description here

enter image description here

所望の出力は次のようになります。空港名と同等)。

私のJavaコードは次のようになります。

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 { 

    } 

} 

私はあなたの答えを楽しみにしています。どうもありがとう!

答えて

0

返す行には、ノードのリストと重みが含まれています。それはあなたがあなたの質問で尋ねるものであり、それはあなたが得るものです。その結果をあなたが望む形式に「解凍」する必要があります。

私が何を意味するかを示すためのコードスニペットのカップル:process_listentryで

 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 
     } 

、その後:

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(); 
    } 

... それはあなたがクエリで頼む何に依存しないとしたがって解凍する必要があります...

希望します。 Tom

+0

IHDSMutator < - これはなんですか?それを見て、私はそれのためのパッケージやlibを見つけることはありません。説明していただけますか? –

+0

これは、結果を返すために使用する構造の例です。実際には、XMLドキュメントに似た、階層的なデータ構造(HDS)です。これは私の例の要点ではありませんが、実際のデータを抽出するためにクエリから取得した結果を処理しなければならないという点が重要です。実際には、コンソールにのみ印刷したい場合は、結果を保持するための構造体は必要ありません。 –

関連する問題