0

我正在做一个与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");

再次?它似乎不是那样工作的。

非常感谢!

4

1 回答 1

3

您的代码看起来正确。这index().forNodes("nodes");基本上是一个创建或获取操作,如果索引不存在,它将创建索引,否则它将返回该索引名称的索引对象。

在您的代码中,请确保您使用的是事务,因为如果您不这样做,您实际上不会保留任何信息。否则,要在下次需要时执行查找,您只需执行此操作nodeIndex.get(USERNAME_KEY, username),它将返回映射到索引中的任何节点。

于 2013-05-05T04:44:43.040 回答