私はNeo4jを初めて使用します-昨日の夕方、Neo4jで遊び始めました。
すべてのノードは、ノードの作成中に生成される自動インクリメント整数によって識別されることに気付きました-これは常に当てはまりますか?
私のデータセットには自然な文字列キーが含まれているため、Neo4jが割り当てたIDと自分のIDの間をマッピングする必要はありません。代わりに文字列識別子を使用することはできますか?
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
これは役立つはずです:
バッチインポート中に自動インデックス付けをサポートするインデックスを作成するneo4j.propertiesで自動インデックス付けが有効になっている場合、作成される各ノードはnode_auto_indexという名前のインデックスに追加されます。さて、ここにクールな部分があります。元の手動インデックスを(バッチインポート時に)追加し、node_auto_indexという名前を付けて、neo4jで自動インデックス付けを有効にすると、バッチ挿入されたノードは自動インデックス付けされたように表示されます。そして、そこからノードを作成するたびに、ノードにもインデックスが作成されます。**
ソース: カスタムキーでノードを識別する
生成されるIDはデフォルトであり、ユーザーが変更することはできません。ユーザーは文字列識別子をそのノードのプロパティとして使用できます。
Neoのドキュメントによると、自動インデックスが適切に配置されているはずです http://neo4j.com/docs/stable/query-schema-index.html しかし、まだ多くの制限があります
すべての答えを超えて、neo4jは独自のIDを作成して、より速く動作し、より良いサービスを提供します。内部システムがIDの間で競合しないことを確認してください。そうすると、同じプロパティを持つノードが作成され、システム内に空のノードとして表示されます。