web-dev-qa-db-ja.com

Node neo4jの識別子

私はNeo4jを初めて使用します-昨日の夕方、Neo4jで遊び始めました。

すべてのノードは、ノードの作成中に生成される自動インクリメント整数によって識別されることに気付きました-これは常に当てはまりますか?

私のデータセットには自然な文字列キーが含まれているため、Neo4jが割り当てたIDと自分のIDの間をマッピングする必要はありません。代わりに文字列識別子を使用することはできますか?

54

Node-idは実装の詳細と考えてください(リレーショナルデータベースのROWIDなどは、ノードを識別するために使用できますが、決して再利用しないでください)。

自然キーをプロパティとしてノードに追加してから、自然キーを使用してノードのインデックスを作成します(または自動インデックスを有効にします)。

例:Java API:

Index<Node> idIndex = db.index().forNodes("identifiers");

Node n = db.createNode();
n.setProperty("id", "my-natural-key");
idIndex.add(n, "id",n.getProperty("id"));

// later
Node n = idIndex.get("id","my-natural-key").getSingle(); // node or null

自動インデクサーを使用すると、「id」フィールドの自動インデクシングを有効にできます。

// via configuration 
GraphDatabaseService db = new EmbeddedGraphDatabase("path/to/db",
 MapUtils.stringMap( 
    Config.NODE_KEYS_INDEXABLE, "id", Config.NODE_AUTO_INDEXING, "true" ));

// programmatic (not persistent)
db.index().getNodeAutoIndexer().startAutoIndexingProperty( "id" );

// Nodes with property "id" will be automatically indexed at tx-commit
Node n = db.createNode();
n.setProperty("id", "my-natural-key");

// Usage
ReadableIndex<Node> autoIndex = db.index().getNodeAutoIndexer().getAutoIndex();
Node n = autoIndex.get("id","my-natural-key").getSingle();

参照: http://docs.neo4j.org/chunked/milestone/auto-indexing.html および: http://docs.neo4j.org/chunked/milestone/indexing。 html

68
Michael Hunger

これは役立つはずです:

バッチインポート中に自動インデックス付けをサポートするインデックスを作成するneo4j.propertiesで自動インデックス付けが有効になっている場合、作成される各ノードはnode_auto_indexという名前のインデックスに追加されます。さて、ここにクールな部分があります。元の手動インデックスを(バッチインポート時に)追加し、node_auto_indexという名前を付けて、neo4jで自動インデックス付けを有効にすると、バッチ挿入されたノードは自動インデックス付けされたように表示されます。そして、そこからノードを作成するたびに、ノードにもインデックスが作成されます。**

ソース: カスタムキーでノードを識別する

0
user2522884

生成されるIDはデフォルトであり、ユーザーが変更することはできません。ユーザーは文字列識別子をそのノードのプロパティとして使用できます。

0
Reetish Chand

Neoのドキュメントによると、自動インデックスが適切に配置されているはずです http://neo4j.com/docs/stable/query-schema-index.html しかし、まだ多くの制限があります

0
Pavel Niedoba

すべての答えを超えて、neo4jは独自のIDを作成して、より速く動作し、より良いサービスを提供します。内部システムがIDの間で競合しないことを確認してください。そうすると、同じプロパティを持つノードが作成され、システム内に空のノードとして表示されます。

0
Sumsun