我有客户(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。
谢谢。
答案 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