我正在 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)
我希望得到巧克力
和球
,其中每个计数均为1,但我什么也没得到。我错过了什么?
最佳答案
您在初始 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
英文:“匹配包含特定产品的订单。对于这些订单,获取所有包含的非初始产品的产品。对于这些产品,匹配包含它们的订单。返回产品名称和计算它包含在多少个订单中。”
关于neo4j - 如何在 Neo4j 中进行简单的推荐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26624995/