【发布时间】:2016-11-07 08:56:55
【问题描述】:
这是基于 Neo4j 文档中的示例 Cypher:
MATCH (user:User)-[:ORDERS]->(:Product)<-[:ORDERS]-(otherUser:User)-[:ORDERS]->(recommended:Product)
WHERE NOT (user)-[:ORDERS]->(recommended)
AND user.id = 171
RETURN distinct recommended.id, count(distinct otherUser.id) as frequency
ORDER BY frequency DESC
LIMIT 200
而以下是我所做的改进:
MATCH (user:User)-[:ORDERS]->(p:Product)
WHERE user.id = 171
WITH DISTINCT p, user
MATCH (p)<-[:ORDERS]-(otherUser:User)
WITH DISTINCT otherUser, user
MATCH (otherUser)-[:ORDERS]->(recommended:Product)
WHERE NOT (user)-[:ORDERS]->(recommended)
RETURN distinct recommended.id, count(distinct otherUser.id) as frequency
ORDER BY frequency DESC
LIMIT 200
两者都返回相同的结果,但第二个运行速度快 6 倍。 (但在我的 Macbook 上仍然需要 3 秒)
- 为什么第二个跑得更快?
- 如何进一步加快速度?
【问题讨论】:
标签: neo4j cypher collaborative-filtering