我有一个包含两种类型节点的图表:人员节点和购买的产品,关系是购买。如果两个节点共享三个产品节点,我想将两个人节点链接在一起,即如果他们购买了三个相同的东西。这样做的最佳方法是什么?
该图表有几亿个节点。哪种方式也会最快?在密码中,我想的可能是下面这样的东西,但它花了很多年,似乎什么也没做?
MATCH path1 = (p1:PEOPLE)--(product:PRODUCT)--(p2:PEOPLE)
WHERE p1.person_id <> p2.person_id
WITH path1,p1,p2
MATCH path2=(p1)--(:PRODUCT)--(p2) WHERE nodes(path2)<>nodes(path1)
WITH path1,path2,p1,p2
MATCH path3 = (p1)--(:PRODUCT)--(p2)
WHERE nodes(path3)<>nodes(path2) and nodes(path3)<>nodes(path1)
create (p1)-[:LINK]->(p2)
create (p2)-[:LINK]->(p1)
任何建议都非常感谢!
答案 0 :(得分:0)
使用count
aggregating function检查两个节点之间的常见产品数量,而不是使用多个MATCH
子句。
MATCH (p1:PEOPLE)--(product:PRODUCT)--(p2:PEOPLE)
WITH p1, p2, count(product) AS commonProductCount
WHERE commonProductCount >= 3
CREATE (p1)-[:LINK]->(p2)
CREATE (p2)-[:LINK]->(p1)
注意。根据经验,没有必要在相反方向创建两个LINK
关系。您应该选择一个方向并创建关系,并在查询中使用()-[:LINK]-()
等无向关联。