2013-05-05 154 views
0

我正在研究一個neo4j相關的項目,我不太明白neo4j中的「索引」。在關係數據庫中,我們在持久磁盤上有表和索引。如何存儲和檢索neo4j索引

我認爲它是相同的neo4j,節點,關係(邊緣)和索引是持久的。我可能是錯的。

在這個例子中,https://github.com/mrhooray/neo4j-sample/blob/master/src/EmbeddedNeo4jWithIndexing.java

public class EmbeddedNeo4jWithIndexing { 
    private static final String DB_PATH = "/home/mrhooray/Documents/neo4j_db/"; 
    private static final String USERNAME_KEY = "username"; 
    private static GraphDatabaseService graphDb; 
    private static Index<Node> nodeIndex; 
    //... 

    public static void main(String[] args) { 
      //... 
      // index is created as following 
      nodeIndex = graphDb.index().forNodes("nodes"); 
    } 

    // and used to insert data 
    private static Node createAndIndexUser(final String username) { 
     Node node = graphDb.createNode(); 
     node.setProperty(USERNAME_KEY, username); 
     nodeIndex.add(node, USERNAME_KEY, username); 
     return node; 
    } 
} 

EmbeddedNeo4jWithIndexing是圖形數據庫的抽象。但是,如果我創建並填充圖形數據庫然後關閉程序,該怎麼辦?然後,我想再次訪問具有相同索引的相同數據庫,是否只創建EmbeddedNeo4jWithIndexing的另一個對象?我怎樣才能得到原始指標?

呼叫

nodeIndex = graphDb.index().forNodes("nodes"); 

一遍嗎?它似乎沒有那樣工作。

非常感謝!

回答

3

您的代碼看起來正確。 index().forNodes("nodes");基本上是一個創建或獲取操作,如果它不存在,它將創建索引,否則它將返回索引名稱的索引對象。

在你的代碼中,確保你使用的是交易,因爲如果你不這樣做,你將不會實際存留任何信息。否則,要在下次需要時執行查找,您只需執行nodeIndex.get(USERNAME_KEY, username),它會返回映射到索引中的節點的任何節點。