2013-05-05 138 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),它会返回映射到索引中的节点的任何节点。