1

我有客户(id、name、type)、商业(id、name、type)以及它们之间的关系(idcustomer、idcommerce、数量),这表明客户已经购买了商业和数量。

好吧,我想实现与原始节点具有相同关系的节点,我的意思是,如果客户 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。

谢谢你。

4

1 回答 1

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
于 2013-09-09T17:17:35.977 回答