2013-07-01 33 views
0

現在有一個暗號查詢方法開始使用Java節點的性能嵌入式CYPHER查詢

public static void RunQuery(String _query) 
{ 
    Properties prop = new Properties(); 
    final String DB_PATH = "path/to/db" 
    GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH); 
    ExecutionEngine engine = new ExecutionEngine(graphDb); 
    ExecutionResult result = engine.execute(_query); 
    for(Map<String,Object> map : result) 
    { 
     System.out.println(map.toString()); 
    } 
    graphDb.shutdown(); 


} 

然而,這只是讓我得到這樣的結果:

{a=Node[11303]} 
{a=Node[11341]} 
{a=Node[11343]} 
{a=Node[11347]} 
{a=Node[11349]} 
{a=Node[11378]} 

我怎樣才能增加它吐整個查詢結果像cypher shell一樣嗎?

回答

2

你的查詢是什麼樣的。返回的Map<String, Object>將具有您返回的變量的鍵。對象可以是一個路徑,節點或關係,這隻會調用它們上的本地toString(),它們在Java代碼中只返回節點ID。你必須建立你自己的打印機,這將獲得屬性鍵並遍歷每一個。

for (String key : node.getPropertyKeys()) { 
    System.out.println("Key: " + key + ", Value: " + node.getProperty(key)); 
} 
+0

是的,我正在尋找如果對象是一個節點,它打印出的屬性和值,如果它是一個值(如計數)它不是噸O操作。基本上我想在Web界面或neo4j-shell中重新創建控制檯。 – Badmiral

+1

這是由你打印出來的屬性,我不相信Neo4j提供了任何方便的方法來做到這一點,但你可以用Java來做到這一點,我已經修改了我的答案,包括這樣做的代碼。 – Nicholas

+0

謝謝尼古拉斯!在你的代碼中,什麼是r和什麼是relationshipDto? – Badmiral

-1

這取決於您的查詢的RETURN ..

例如,如果你有一個像這樣的查詢:

_query="Start x= node(someIndex) Match x-[rel:SOMETHING]-n Return n"; 

所以,你的代碼可以

ExecutionResult result = engine.execute(_query); 
    Iterator<Node> n_column = result.columnAs("n"); 
      for (Node outputNode: IteratorUtil.asIterable(n_column)) { 
       System.out.println(outputNode.getProperty("yourKey","defaultValueIfNull")); 
      } 
+0

這假設你知道apriori n返回。我只想返回查詢的字符串結果以複製neo4j-shell – Badmiral