我目前正致力于产品推荐查询,该产品推荐查询应基于查看类似客户查找类似客户,然后建议其他类似客户查看的产品,将产品推荐给当前客户。我们的业务是托运的,所以我们每个产品只有1个,所以我在类似的观点和仅购买时使用更大的数据集。我希望这个查询能够在一秒钟内运行良好,因为它只针对当前在我们开发环境中的10k多个产品和10k用户运行。我不确定这是我的查询是否需要调优,linux / java / neo4j配置或两者兼而有之。有没有人有这方面的经验?
MATCH (currentUser:websiteUser{uuid: 'ea1d35e7-73e6-4990-b7b5-
2db24121da9b'})-[:VIEWED]->(i:websiteItem)<-[:VIEWED]-
(similarUser:websiteUser)-[r:VIEWED]->(similarItem:websiteItem
{active: true})
RETURN similarItem.designer, similarItem.title,
similarItem.brandSize, similarItem.sku, similarItem.shopifyProductId,
similarItem.url, similarItem.price, COUNT(distinct r) AS score
ORDER BY score DESC LIMIT 15
个人资料输出:
答案 0 :(得分:0)
在做了一些进一步的研究,并尝试了与互联网上其他帖子相关的许多不同的建议,这些建议与机器的性能调整和查询相关,我发现以下查询重写以提供基于重写的最佳速度在步骤中查询并使用distinct来限制从一个查询段到下一个段的结果的扩展膨胀。
MATCH (u:websiteUser{uuid: 'ea1d35e7-73e6-4990-b7b5-2db24121da9b'})
MATCH (u)-[:VIEWED]->(i:websiteItem)
WITH distinct i
MATCH (i)<-[:VIEWED]-(su:websiteUser)
WITH distinct su
MATCH (su)-[r:VIEWED]->(si:websiteItem {active: true})
RETURN si.designer, si.title, si.brandSize, si.sku, si.shopifyProductId,
si.url, si.price, COUNT(distinct r) AS score
ORDER BY score DESC
LIMIT 15