使用 Cypher 添加与现有节点的关系不起作用

Adding relationship to existing nodes with Cypher doesn't work

我正在使用 Neo4J 图形数据库 1.1.5 网络版处理巴拿马数据集。我在数据库中找到了摩尔多瓦前总理 Ion Sturza,并想制作一张他的相关网络的地图。我使用以下代码使用 Cypher 进行查询(创建变量 'IonSturza'):

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

我确定实体 'CONSTANTIN LUTSENKO' 与 'Quade..' 和 'Kinbo...' 等实体的链接不同,名称为小写字母,如 this picture. I hence want to map a relationship 'SAME_COMPANY_AS' between the capslock and the uncapped version. I tried the following code based on this @StefanArmbruster 的回答:

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)

我没有索引,而是使用 'where' 语句来指定仅链接到带有 ID“284429”的实体的无上限版本。 但是我的代码显示笛卡尔积错误消息:

This query builds a cartesian product between disconnected patterns.If a part of a query contains multiple disconnected patterns, this will build a cartesian product between all those parts. This may produce a large amount of data and slow down query processing. While occasionally intended, it may often be possible to reformulate the query that avoids the use of this cross product, perhaps by adding a relationship between the different parts or by using OPTIONAL MATCH (identifier is: (b))<<

同样,当我执行时,没有变化,没有行!!我在这里错过了什么?有人可以帮我在节点之间插入这种关系吗?提前致谢!

只要您匹配两个或多个断开连接的模式,就会出现笛卡尔积警告。然而,在这种情况下,没关系,因为您正在通过可能唯一的名称查找它们,因此您的结果应该是每个节点一个。

如果该模式的每个单独部分返回多个节点,那么您将有(a 行)x(b 行),两个结果集之间的笛卡尔积。

所以在这种特殊情况下,请不要介意警告。

至于为什么您没有看到变化,请注意您正在为图表的不同部分重复使用变量:您正在为 officer 的大写版本和:Entity 在你的 WHERE 中。没有与两者匹配的节点。

相反,为每个变量使用不同的变量,并在匹配中包含 :Entity。此外,一旦匹配到节点并将它们绑定到变量,就可以稍后在查询中重复使用变量名称,而不必重复其标签或属性。

试试这个:

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

虽然我不太确定您要做什么...是 :Officer 一家公司吗?这种关系类型似乎不太对。

我尝试了@InverseFalcon 的答案并感谢它,通过将 属性 标识符从 'id' 修改为 'name' 并对两个 [=] 使用 属性 17=] 和 '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!