0

私は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 に答える