我正在neo4j中进行一个简单的演示,我想根据订单使用推荐,以及如何购买。我在这里创建了一个图表:http://console.neo4j.org/?id=jvqr95。
基本上我有很多关系,如:
(o:Order)-[:INCLUDES]->(p:Product)
订单可以有多个产品。
鉴于具体的产品ID,我希望找到包含具有给定产品ID的产品的订单中的其他产品,我想根据产品订单的数量来订购。
我尝试过以下方法:
MATCH (p:Product)--(o)-[:INCLUDES]->(p2:Product)--(o2)
WHERE p.name = "chocolate"
RETURN p2, COUNT(DISTINCT o2)
但是这并没有给我我想要的结果。对于该查询,我希望以{2}获得chips
,但我只得到1的计数。
以下查询:
MATCH (p:Product)--(o)-[:INCLUDES]->(p2:Product)--(o2)
WHERE p.name = "chips"
RETURN p2, COUNT(DISTINCT o2)
我希望将chocolate
和ball
放回每个计数为1的位置,但我不会得到任何回报。我错过了什么?
答案 0 :(得分:4)
您在初始MATCH
中匹配太多内容。
MATCH (o:Order)-[:INCLUDES]->(p:Product { name:'ball' })
MATCH (o)-[:INCLUDES]->(p2:Product)
WHERE p2 <> p
MATCH (o2:Order)-[:INCLUDES]->(p2)
RETURN p2.name AS Product, COUNT(o2) AS Count
ORDER BY Count DESC
英文:&#34;匹配包含特定产品的订单。对于这些订单,请获取所有非初始产品的产品。对于这些产品,请匹配它们所包含的订单。返回产品名称以及包含在其中的订单数量。&#34;