我正在使用 rNeo4j 开发推荐应用程序,但在编写高效查询时遇到了一些问题。查询的目标是向用户推荐一个项目,并规定他们以前没有使用过该项目。
我想返回项目的名称、路径上的节点(用于推荐的可视化)以及一些额外的措施,以使推荐尽可能相关。目前我正在返回之前使用过该项目的用户数量、推荐路径的长度以及 qCount 关系属性的总和。
当前查询:
MATCH (subject:User {id: {idQ}), (rec:Item),
p = shortestPath((subject)-[*]-(rec))
WHERE NOT (subject)-[:ACCESSED]->(rec)
MATCH (users:User)-[:ACCESSED]->(rec)
RETURN rec.Name as Item,
count(users) as popularity,
length(p) as pathLength,
reduce(weight = 0, q IN relationships(p)| weight + toInt(q.qCount)) as Strength,
nodes(p) as path
ORDER BY pathLength, Strength DESCENDING, popularity DESCENDING
LIMIT {resultLimit}
查询似乎工作正常,但所需应用程序所需的时间太长(大约 8 秒)。有人对如何提高我的查询性能有一些建议吗?
我是 cypher 的新手,所以如果这对更高级的用户来说是显而易见的,我深表歉意。