2017-04-11 26 views
1

我正在使用Neo4J圖形數據庫1.1.5 web版本處理巴拿馬數據集。我確定了摩爾多瓦前總理Ion Sturza在數據庫上的位置,並想製作他的相關網絡地圖。我用下面的代碼使用CYPHER(創建變量「IonSturza」)查詢:使用Cypher將關係添加到現有節點不起作用

MATCH (IonSturza {name: "Ion Sturza"}) RETURN IonSturza 

我確定的是,實體「CONSTANTIN Lutsenko的」有不同的掛像「克鄧..」和實體的Kinbo ......「與在this圖片中的小字母的名稱。因此,我想要在大寫和無限制版本之間映射關係「SAME_COMPANY_AS」。我試圖通過@StefanArmbruster基於this回答下面的代碼:

MATCH (a:Officer {name :"Constantin Lutsenko"}),(b:Officer{name : 
"CONSTANTIN LUTSENKO"}) 
where (a:Officer{name :"Constantin Lutsenko"})-[:SHAREHOLDER_OF]-> 
(b:Entity{id:'284429'}) 
CREATE (a)-[:SAME_COMPANY_AS]->(b) 

而非索引的,我用了「其中」語句來指定哪些是隻與實體軸承內徑「284429」脫帽版本。 我的代碼然而顯示了笛卡爾乘積錯誤消息:

這個查詢構建patterns.If查詢的部分斷開之間的笛卡爾積包含多個斷開的模式,這將建立所有這些部件之間的笛卡爾積。這可能會產生大量數據並減慢查詢處理速度。雖然偶爾意,也可能常常是可能的,或許通過將不同部件之間的關係或通過使用OPTIONAL MATCH重新配製避免使用該橫產品的查詢(標識爲:(b))的< <

另外,當我執行時,沒有變化,沒有行!我在這裏錯過了什麼?有人可以幫助我在節點之間插入這種關係。提前致謝!

回答

1

只要您在兩個或多個斷開連接的模式上匹配,就會顯示笛卡爾產品警告。然而,在這種情況下,這很好,因爲你正在用可能是一個唯一的名字來查找它們,你的結果應該是每個節點。

如果該模式的每個單獨部分都返回多個節點,那麼您將在兩個結果集之間有(行數爲a)x(行數爲b),這是一個笛卡爾乘積。

因此,在這種特殊情況下,不要介意警告。

至於爲什麼你沒有看到變化,請注意,你正在爲圖的不同部分重複使用變量:你使用變量b爲大寫版本的官員,以及:你的實體哪裏。沒有與兩者匹配的節點。

相反,對每個變量使用不同的變量,並在匹配中包含:Entity。此外,一旦您匹配節點並將它們綁定到變量,您可以稍後在查詢中重用變量名稱,而無需重複其標籤或屬性。

試試這個:

MATCH (a:Officer {name :"Constantin Lutsenko"})-[:SHAREHOLDER_OF]-> 
(:Entity{id:'284429'}),(b:Officer{name : "CONSTANTIN LUTSENKO"}) 
CREATE (a)-[:SAME_COMPANY_AS]->(b) 

雖然我不太清楚你試圖做...什麼是:官某公司?這種關係類型看起來不太合適。

+0

你是對的:它應該是:SAME_NAME_AS不是「(a) - [:SAME_COMPANY_AS] - >(b)」。我試過你的代碼,你的代碼很有意義。但是再次顯示沒有變化。然後我嘗試使用屬性'name'而不是'id'。它的工作原理。非常感謝! –

0

我試了@InverseFalcon的答案,並感謝它,通過修改屬性標識符從'id'到'name',並使用'a'和'b'屬性,4個關係由以下創建代碼:

MATCH (a:Officer {name :"Constantin Lutsenko"})-[:SHAREHOLDER_OF]-> 
(:Entity{name:'KINBOROUGH PORTFOLIO LTD.'}),(b:Officer{name : "CONSTANTIN 
LUTSENKO"})-[:SHAREHOLDER_OF]->(:Entity{name:'Chandler Group Holdings Ltd'}) 
CREATE (a)-[:SAME_NAME_AS]->(b) 

非常感謝你@InverseFalcon!

相關問題