Neo4Jのラベルの下でグループ化されているノード間の関係を作成する方法
-
21-12-2019 - |
質問
次の文字列クエリ
を使用して、グラフに2つのノードグループを作成しました。Pharma Group
CREATE ( p1:pharma { name: " Magnesium ", id: " 12 " } )
CREATE ( p2:pharma { name: " Hyoscine Butylbromide ", id: " 22 " } )
CREATE ( p3:pharma { name: " Propantheline Bromide ", id: " 23 ", } );
.
INDグループ
CREATE ( i1:ind { id: '1', name: 'Dyspepsia', pdfk: '12'})
CREATE ( i2:ind { id: '5', name: 'Symptomic relief of intestinal disorder', pdfk: '22'})
CREATE ( i3:ind { id: '6', name: 'Symptomic relief of disorder', pdfk: '22'})
CREATE ( i4:ind { id: '7', name: 'Bowel colic', review: 'False', pdfk: '23'});
.
それはリレーショナルデータベーステーブと同じように、今、私はこれら2つのノードグループの間の関係船を定義したいです。
関係= ID 12を搭載したPharma In PharmaのノードID 1のノードが付いている関係名has_indがありますか?
このようなどこかにこの
MATCH (a:pharma),(b:ind)
WHERE a.id = '12' AND b.id = '1'
CREATE (a)-[:has_ind]->(b);
.
私はこれらを試してみました
MATCH (a:pharmaDrug),(b:indication)
WHERE a.name = 'Magnesium Carbonate' AND b.name = 'Dyspepsia'
CREATE (a)-[:has_indication]->(b);
.
両方とも530ミリ秒でを返しています
この目的のための正しい文字列クエリを見つけるのを手伝ってください。事前にありがとうございます。
==========================================================================================================================================================================================================================================================」である======================
私の変更は次のとおりです
CREATE ( p1:pharma { name: "Magnesium", id: 12 } )
CREATE ( p2:pharma { name: "Hyoscine Butylbromide", id: 22 } )
CREATE ( p3:pharma { name: "Propantheline Bromide", id: 23 } );
CREATE ( i1:ind { id: 1, name: 'Dyspepsia', pdfk: '12'})
CREATE ( i2:ind { id: 5, name: 'Symptomic relief of intestinal disorder', pdfk: '22'})
CREATE ( i3:ind { id: 6, name: 'Symptomic relief of disorder', pdfk: '22'})
CREATE ( i4:ind { id: 7, name: 'Bowel colic', review: 'False', pdfk: '23'});
.
2つのラベルの下のノードを作成する
MATCH (a:pharma),(b:ind)
WHERE a.id = ' 12 ' AND b.id = ' 1 '
CREATE (a)-[:has_indication]->(b);
.
これは出力なしでゼロ行を与えますか?
解決
あなたがあなたの 'Pharma'コードを見るとあなたが持っているならば、あなたがあなたの商品を作成した方法のせいです:
CREATE ( p1:pharma { name: " Magnesium ", id: " 12 " } )
.
これに対して一致する必要があります。
MATCH (a:pharma)
WHERE a.id = ' 12 '
RETURN a
.
私はそれを一致させるために '12'の周囲に余分なスペースを追加しました。だからあなたはクエリを読みます:
MATCH (a:pharma),(b:ind)
WHERE a.id = ' 12 ' AND b.id = '1'
CREATE (a)-[:has_indication]->(b)
.
今、それが仕事になるでしょう - しかしそれはモデルを少し変更する価値があるかもしれません、id
が常に整数の場合、私はあなたの作成者を次のように変えるでしょう:
CREATE ( p1:pharma { name: "Magnesium", id: 12 } )
CREATE ( p2:pharma { name: "Hyoscine Butylbromide", id: 22 } )
CREATE ( p3:pharma { name: "Propantheline Bromide", id: 23 } );
.
Super "
(または'
)文字を使用することで、名前のための追加のスペースを追加している(あなたの2番目のクエリはしなかった理由です)。作業)
編集
OK、これはデータの完全に機能しているセットです、私はこれを取得するためにCREATE文の両方を編集しました:
CREATE ( p1:pharma { name: 'Magnesium', id: 12 } )
CREATE ( p2:pharma { name: 'Hyoscine Butylbromide', id: 22 } )
CREATE ( p3:pharma { name: 'Propantheline Bromide', id: 23} )
CREATE ( i1:ind { id: 1, name: 'Dyspepsia', pdfk: 12})
CREATE ( i2:ind { id: 5, name: 'Symptomic relief of intestinal disorder', pdfk: 22})
CREATE ( i3:ind { id: 6, name: 'Symptomic relief of disorder', pdfk: 22})
CREATE ( i4:ind { id: 7, name: 'Bowel colic', review: 'False', pdfk: 23})
.
基本的に'
文字を削除し、ID(およびPDFK)の整数を使用しました。
これのためのMATCH
は次のとおりです。
MATCH (a:pharma),(b:ind)
WHERE a.id = 12 AND b.id = 1
CREATE (a)-[:has_ind]->(b)
.
作品を確認する(戻ってきたメッセージとは別に):
MATCH (p:pharma),(i:ind) RETURN p,i
.
あなたは別のものにリンクされているのがわかります。