Neo4j相当于一个sql交叉连接

时间:2014-11-22 17:32:57

标签: neo4j cross-join

我在neo4j中返回了1000个节点的列表。我想与自己交叉这个列表,这样我就可以在所有成对组合之间建立关系。在sql中我只是使用交叉连接。是否存在允许我在neo4j中执行相同操作的等效函数/过程。

我的第一个方法是做以下事情:

MATCH (b:BASKET)
WITH count(b) AS GlobalBasketCount
MATCH (n:PRODUCT)-[:COLLECTIONS]-(b:BASKET)
WITH n,count(b) AS nBasketCount,GlobalBasketCount
WHERE nBasketCount > 0.001*GlobalBasketCount 

MATCH (m:PRODUCT)-[:COLLECTIONS]-(b:BASKET)
WITH m,count(b) AS mBasketCount,n,nBasketCount,GlobalBasketCount
WHERE mBasketCount > 0.001*GlobalBasketCount AND m.id < n.id

CREATE (m)-[r:RELATIONSHIP]->(n)
WITH m,n,r,nBasketCount,mBasketCount
SET r.BasketCountProduct = nBasketCount*mBasketCount

但是,这需要通过匹配查询创建1001次相同的产品列表,效率非常低。

旁注:

m.id < n.id

是为了防止重复对。

1 个答案:

答案 0 :(得分:1)

试试这个:

MATCH (n:Foo)
WITH collect(n) as nodes
UNWIND nodes as n1
UNWIND nodes as n2
WITH n1,n2
WHERE id(n1) < id(n2)
...