PageRank查询结果不一致(1、APOC 2、扩展的算法包)
发布于 3 个月前 作者 crazyyanchao 382 次浏览 来自 问答

一、安装的两个扩展包: apoc-3.4.0.1-all.jar graph-algorithms-algo-3.4.7.0.jar 二、在相同的数据集上执行pagerank结果相差巨大(数据库版本neo4j-community-3.4.7) 1、apoc-3.4.0.1-all.jar存在的过程 MATCH (n:专题) WITH collect(n) as nodes CALL apoc.algo.pageRank(nodes) YIELD node,score RETURN node.name,score ORDER BY score DESC 结果如图: TIM截图20180925144749.png

2、graph-algorithms-algo-3.4.7.0.jar存在的过程 CALL algo.pageRank.stream(‘专题’,NULL,{iterations:20, dampingFactor:0.85}) YIELD node, score RETURN node.name, score ORDER BY score DESC 结果如图: TIM截图20180925144717.png

如上述两种方式,使用算法扩展包查询速度较快,但是结果与apoc.algo.pageRank相差很大,请问是什么原因造成的?是否是查询写的有问题还是其它原因?

12 回复

你一个是“专题”,一个是“专题事件” ,好像节点就不一样哦

@bingo 是一样的标签,问题修改了

算法用algorithms里的包,apoc里的算法已经不维护了. 之前提issues得到的答案 https://github.com/neo4j-contrib/neo4j-apoc-procedures/issues/847

@nonono 是的,计算结果差距这么大就有点奇怪了,还没有找到原因,这是我提的issues https://github.com/neo4j-contrib/neo4j-graph-algorithms/issues/716 委屈委屈v50648.png

好像用法没有对algo.pageRank 用这个

@bingo

MATCH (n:专题 {name:'十一长假'}) CALL algo.pageRank.stream('专题事件',NULL,{iterations:20, dampingFactor:0.85}) YIELD nodeId, score MATCH (node) WHERE id(node)=nodeId  RETURN node.name,score ORDER BY score DESC

都测试了一遍结果一样~

用 algo.pageRank 不是algo.pageRank.stream

我测试algo.pageRank是正常的。

你的标签是中文的。。。。。建议用英文。。。。

@bingo algo.pageRank 和algo.pageRank.stream区别在哪里? 另外,这种写法 CALL algo.pageRank( ‘MATCH (p:Page) RETURN id§ as id’, ‘MATCH (p1:Page)-[:Link]->(p2:Page) RETURN id(p1) as source, id(p2) as target’, {graph:‘cypher’, iterations:5, write: true}); 第一个match查询的结果好像没什么用啊,我没看懂 第二个match查询得到的source和target是起什么作用的,这里的pageRank是基于全图计算的还是基于查询的子图计算的, 谢谢!

1.去扫描label为Page的节点,不会去全库扫描 2.source和target 还有上面的id 是必须返回的。具体程序可以到github看看。你都限定了节点范围id ,是不会及逆行全图计算的

回到顶部