我正在研究与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");
再次?它似乎没有那样工作。
非常感谢!
答案 0 :(得分:3)
您的代码看起来是正确的。 index().forNodes("nodes");
基本上是一个创建或获取操作,如果它不存在,它将创建索引,否则它将返回该索引名称的索引对象。
在您的代码中,请确保您使用的是交易,因为如果不这样做,您实际上不会保留任何信息。否则,要在下次需要时执行查找,只需执行nodeIndex.get(USERNAME_KEY, username)
,它将返回映射到索引中的任何节点。