Neo4j 使用Cypher向现有节点添加关系不会';行不通

Neo4j 使用Cypher向现有节点添加关系不会';行不通,neo4j,cypher,relationships,Neo4j,Cypher,Relationships,我正在使用Neo4J graph数据库1.1.5 web版本处理巴拿马数据集。我在数据库中找到了摩尔多瓦前总理Ion Sturza,并想为他的相关网络绘制一张地图。我使用以下代码使用Cypher进行查询(创建变量“IonSturza”): 我发现实体“CONSTANTIN LUTSENKO”与“Quade..”和“Kinbo…”等实体的链接不同,其名称以小写字母表示,如图所示。因此,我想在capslock和uncapped版本之间映射一种“同一公司”的关系。根据@StefanArmburster

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

我发现实体“CONSTANTIN LUTSENKO”与“Quade..”和“Kinbo…”等实体的链接不同,其名称以小写字母表示,如图所示。因此,我想在capslock和uncapped版本之间映射一种“同一公司”的关系。根据@StefanArmburster的回答,我尝试了以下代码:

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”的实体。 但是,我的代码显示笛卡尔乘积错误消息:


此查询在断开连接的模式之间构建笛卡尔乘积。如果查询的一部分包含多个断开连接的模式,则将在所有这些部分之间构建笛卡尔乘积。这可能会产生大量数据并减慢查询处理速度。虽然偶尔需要,但通常可以重新格式化查询以避免使用此叉积,可以通过添加不同部分之间的关系或使用可选匹配(标识符为:(b))在匹配两个或多个断开连接的模式时,笛卡尔积警告将出现。但是,在本例中,这很好,因为您通过一个唯一的名称查找这两个节点,因此您的结果应该是每个节点一个

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

因此,在这种特殊情况下,不要介意警告

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

相反,对每个变量使用不同的变量,并在匹配中包含:实体。此外,一旦匹配到节点并将其绑定到变量,就可以在以后的查询中重用变量名,而无需重复其标签或属性

试试这个:

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

虽然我不太清楚你想做什么…一名官员是一家公司吗?该关系类型似乎不太正确。

我尝试了@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

你是对的:它应该是:相同的名称(a)-[:相同的公司(a)]>(b)”。我试过你的代码,你的代码有意义。但是没有再次显示任何更改。然后我尝试使用属性“name”而不是“id”。它是有效的。非常感谢你!
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)