我试图在我的Neo4j数据库中找到两个彼此相距最远的节点。出于我的分析的目的,我正在考虑两个节点之间的最短距离作为它们之间的距离。因此,最远的两个节点将在它们之间具有最长的最短路径。我使用Cypher的以下语法来查找最短的节点。
如Neo4j示例文档http://docs.neo4j.org/chunked/milestone/query-match.html#match-shortest-path中所示,我可以运行以下Cypher查询。
MATCH p = shortestPath((martin:Person)-[*..15]-(oliver:Person))
WHERE martin.name = 'Martin Sheen' AND oliver.name = 'Oliver Stone'
RETURN p
我的数据库有超过50万个节点。蛮力的方式显然需要很长时间。有没有简单或更快的方法来获得这两个节点?
[作为额外的皱纹..图表已加权,但此细节可以忽略。]
答案 0 :(得分:5)
如果我正确阅读此内容,您需要all-pairs shortest path。这将为您提供一个列表,其中每个节点都是一个源,也是每个其他节点的最短路径。虽然它确实按重量做,但你可以简单地使用1的重量来做所有事情。
你必须自己用Java实现这一点,因为Cypher对此没有任何帮助。