我有一个载有以下关系连接的订单和产品在我的数据库的节点:最常见的元组
(:order)-[:contains]->(:product)
我想知道是否有可能找到最常见的n元组以相同顺序出现的产品。
恐怕这是不可能的,因为我有超过1500种产品,使得它们之间的可能组合数量非常高,即使对于小的n也是如此。 1500^4≈5 * 10^12。
我写n的下列测试查询= 3:
MATCH (o:order)-[r:contains]->(p:product)
WITH count(r) as NrProds, o
MATCH (o)-[r:contains]->(p:product)
WHERE NrProds > 3
WITH o
MATCH (o)-[r1:contains]->(p1:product),(o)-[r2:contains]->(p2:product),(o)-[r3:contains]->(p3:product)
WITH o,p1,p2,p3,count(r1) as r1,count(r2) as r2,count(r3) as r3
WITH o,p1,p2,p3,
CASE WHEN r1<r2 AND r1<r3 THEN r1
WHEN r2<r1 AND r2<r3 THEN r2
WHEN r3<r1 AND r3<r2 THEN r3
END as result
WITH result,o,p1,p2,p3
RETURN count(result) as NrPurchs, o.Id,p1.name,p2.name,p3.name ORDER BY NrPurchs DESC
首先,我要确保不考虑产品的任何订单数少于3个的占全部订单的很大一部分,然后我匹配这些订单中的包含关系。 鉴于正在创建的大型联接,我的计算机没有完成查询,这并不奇怪。
有没有办法找到不涉及查询这么多可能性的元组,这样我的电脑就可以完成计算了?
此查询绝对比我的整洁。如果我等待足够长时间,我的电脑甚至会结束。所以谢谢你。 您是否添加了 “WHERE p1.name
是的,'WHERE'条件是为了避免重复 - 我想你认为p1,p2,p3和p3,p2,p1,...是一样的。尝试使用一个订单和产品a,b,c,看看第二个'MATCH'返回的内容(之后没有进行聚合),仅使用一半条件时返回的内容等。了解密码如何绑定变量很重要。 –