私は音楽アーティストのネットワークを示すためにNeo4jグラフを作成しています。
いくつかの列を持つCSVがあります。最初の列は呼ばArtist
れ、曲を作った人です。2番目と3番目の列はそれぞれとFeature1
と呼ばFeature2
れ、曲の注目アーティストを表します(例https://docs.google.com/spreadsheets/d/1TE8MtNy6XnR2_QE_0W8iwoWVifd6b7KXl20oCTVo5Ug/edit?usp=sharingを参照)
特定のアーティストが単一のノードを持つようにマージしました。アーティストは、誰かが紹介された回数を表すプロパティとのFEATURED
関係によって接続されstrength
ています。関係が初期化されると、関係プロパティの強度は1に設定されます。たとえば(X)-[r:FEATURED]->(Y)
、最初に発生したときr.strength = 1
。
CREATE CONSTRAINT ON (a:artist) ASSERT a.artistName IS UNIQUE;
CREATE CONSTRAINT ON (f:feature) ASSERT f.artistName IS UNIQUE;
CREATE CONSTRAINT ON (f:feature1) ASSERT f.artistName IS UNIQUE;
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS from 'aws/artist-test.csv' as line
MERGE (artist:Artist {artistName: line.Artist})
MERGE (feature:Artist {artistName: line.Feature1})
MERGE (feature1:Artist {artistName: line.Feature2})
CREATE (artist)-[:FEATURES {strength:1}]->(feature)
CREATE (artist)-[:FEATURES {strength:1}]->(feature1)
次に、機能のない曲の[なし]ノードを削除しました
MATCH (artist:Artist {artistName:'None'})
OPTIONAL MATCH (artist)-[r]-()
DELETE artist, r
XがCSVのさらに下の別の曲でYを特徴としている場合、コードは現在、との別の(重複した)関係を作成しr.strength = 1
ます。新しい関係を作成するのではなく、(以前に作成した)関係を1つだけにして、の値をr.strength
1増やしたいと思います。
どうすればこれを行うことができますか?私の現在のアプローチは、重複する関係の束を作成してから、戻ってすべての重複する関係をカウントし、を設定することr.strength = #duplicate relationships
でした。しかし、私はこれを機能させることができませんでした、そして私がこれにもっと時間を浪費する前に、私はこれを達成するためのより効率的な方法があると思いました。
どんな助けでも大歓迎です。ありがとう!
ON MATCHSETとの関係でMERGEを使用できます
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS from 'aws/artist-test.csv' as line
MERGE (artist:Artist {artistName: line.Artist})
MERGE (feature:Artist {artistName: line.Feature1})
MERGE (feature1:Artist {artistName: line.Feature2})
MERGE (artist)-[f1:FEATURES]->(feature)
ON CREATE SET f1.strength = 1
ON MATCH SET f2.strength = f1.strength + 1
MERGE (artist)-[f2:FEATURES]->(feature1)
ON CREATE SET f2.strength = 1
ON MATCH SET f2.strength = f2.strength + 1
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加