オファーと顧客のグラフがあります。顧客は別の顧客とオファーを共有できるため、これが発生したときにハイパーエッジを作成します。
(CustomerA)-[:SHARED_OFFER]->(newNode)
(newNode)-[:FOR_OFFER]->(オファー)
(newNode)-[:SHARED_WITH]->(顧客) (これは多くの顧客である可能性があります)
別の顧客 B が他の顧客と同じオファーを共有している場合、この関係を表す新しいノードを作成する必要があります。1 つの Cypher クエリでこれらすべてを達成する方法はありますか?
私は使っている:
start c=node:node_auto_index(name="C1"), o=node:node_auto_index(name="Offer"), sharedCustomer=node:node_auto_index(name="C2")
create unique c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o), (sharedOffer)-[:SHARED_WITH]->(sharedCustomer)
これは初めて機能します。次のコンソールを参照してください: http://console.neo4j.org/r/76no2g このクエリは、C1 がオファーを C2 と共有したときに関係を正しく作成しました。
C2 が C3 とオファーを共有する場合のクエリを実行すると、同じノードが再利用されます。これは私が望んでいることではありません。SHARED_OFFER 関係を持つ C2 から作成された新しいノードがあるはずです。クエリは次のとおりです。
start c=node:node_auto_index(name="C2"), o=node:node_auto_index(name="Offer"), sharedCustomer=node:node_auto_index(name="C3")
create unique c-[:SHARED_OFFER]->(sharedOffer)-[:FOR_OFFER]->(o), (sharedOffer)-[:SHARED_WITH]->(sharedCustomer)
どんな助けでも大歓迎です。注: 私は 1.8.1 REST を使用しているため、これを部分的にではなく一度に達成しようとしています。