【发布时间】:2020-05-17 21:27:55
【问题描述】:
在“Graph Algorithms, Practical Examples in Apache Spark & Neo4J (05-2019, Mark Needham, Amy E. Hodler)一书中,第 155 页,有一个使用 APOC 的 PageRank 的例子算法来计算某些用户的 PageRanks。
代码sn-p:
CALL algo.pageRank(
'MATCH (u:User)-[:WROTE]->()-[:REVIEWS]->()-[:IN_CATEGORY]->
(:Category {name: $category})
WITH u, count(*) AS reviews
WHERE reviews >= $cutOff
RETURN id(u) AS id',
'MATCH (u1:User)-[:WROTE]->()-[:REVIEWS]->()-[:IN_CATEGORY]->
(:Category {name: $category})
MATCH (u1)-[:FRIENDS]->(u2)
RETURN id(u1) AS source, id(u2) AS target', (*)
{graph: "cypher", write: true, writeProperty: "hotelPageRank",
params: {category: "Hotels", cutOff: 3}}
)
节点语句很清楚。但是,在关系声明中,它似乎可能包含重复的关系。例如,UserA 写入 2 Reviews; User A 也有 2 个朋友(另外 2 个 Users,例如 B 和 C)。然后,我们最终得到 4 个关系对 A-B、A-C、A-B、A-C,如 (*)。
问题:APOC 的 PageRank 是否会忽略这种重复关系? IE。它只会看到两对A-B,A-C。或者这个实现将重复关系视为“权重”? IE。如果返回了 3 对 A-B,则认为单个 A-B 与权重 3 的关系。或者没有这样的预处理,PageRank 本身会将每一对视为单独的链接?
我查阅了官方文档(如下),但对这个问题没有任何见解。任何帮助表示赞赏。
【问题讨论】:
标签: neo4j neo4j-apoc pagerank