查找与初始节点具有相同关系的节点

时间:2013-09-09 15:53:58

标签: neo4j

我有客户(ID,名称,类型),商家(ID,名称,类型)以及它们之间的关系(idcustomer,idcommerce,quantity),表明客户已在商业中购买了数量。

好吧,我想实现与原始节点具有相同关系的节点,我的意思是,如果客户1在商业中购买id = 10且id = 11我想要获得其他已经购买完全相同商品的客户(至少)客户1为了推荐剩余的商品。

现在,我有下一个命令,但它不起作用,因为它返回了我在客户1购买的所有商业中购买但未购买的所有客户。

START m=node:id(id="1") MATCH  (m)-[:BUY]->(commerces)<-[:BUY]-(customers)  RETURN customers;

实施例

Customer 1   bought  commerce  10, 11
Customer 2   bought  commerce  10, 3
Customer 3   bought  commerce  10, 11, 4
Customer 4   bought  commerce  5, 8, 10

我想要的回报是客户3,以推荐商业4。

谢谢。

1 个答案:

答案 0 :(得分:1)

这是一个解决方案,

第一个查询获取起始节点m购买的所有产品,即第一个“WITH”子句的collect(commerce);

第二个查询获取每个客户与m共享的所有产品,即第二个“With”子句的customerCommerces;

然后,“Where”条款消除了仅共享由m购买的产品的子集的那些客户,因此返回与m共享所有产品的客户。

START m=node:id(id="1")
Match (m)-[:BUY]->(commerce)
With collect(commerce) as mCos
START m=node:id(id="1")
Match (m)-[:BUY]->(commerce)<-[:BUY]-(customer)
with mCos, customer, collect(commerce) as customerCommerces
Where length(mCos) = length(customerCommerces)
Return customer