2016-08-09 5 views
0

Neo4jに既に存在するインデックスを作成するように頼むと、例外がスローされることはありません。Cypher:既に存在するスキーマインデックスの作成

session.run("CREATE INDEX ON :User(email)"); 

質問1:

しかし、どのようにのNeo4jボンネットの下にこれを処理していますか?索引を削除してから再作成するか、索引がすでに存在するため、照会を完全に無視しますか?

私はいくつかのCRUD操作があるので、作成した瞬間に自分のノードのスキーマを定義したいと思っています。これは "CREATE INDEX"と同様に4番目を呼び出していることを意味します。欠点は、インデックスを作成するために作成された冗長呼び出しが作成されるたびに新しいノードが作成されることです。インデックスがすでに存在する場合は無視されても問題ありません。

質問2:

私にはノードがまだラベルユーザーに存在しない場合でも、次の作品に気づいた(私は関連するノードの前にラベルとインデックスを作成することができます意味)。

CREATE INDEX ON :User(email) 

は私がのNeo4jに新たなんだと、あなたが存在しない列に索引を作成することはできませんRDBMSの世界に使用します。これらのラベルとプロパティを持つノードを作成する前にインデックスとラベルを作成すると、予期せぬ問題が発生しないはずです。

答えて

1

回答質問#2では、ラベルやプロパティを持つノードが存在しない場合でもインデックスと制約を作成することができます。実際は非常に一般的です。私はこのルートに行くことを強くお勧めします。

すべてのノード作成でインデックスを作成することをお勧めします。私は無駄なサイクルの多くを引き起こすとは思わないが、良いデザインのようには思えない。

0

質問1

あなたが制約を作成している場合、これは動作しません。彼らは一度だけ呼び出すことができ、存在すれば本当に例外がスローされます。通常の索引はそうしていないので、この全体的なアプローチを試みるべきではありません。

質問2

参照InverseFalconsコメントが、正しいアプローチであると思われます。

関連する問題