gpt4 book ai didi

algorithm - 显示每个节点出现一次并使用 Dijkstra 算法在 neo4j 中找到最短路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:15 32 4
gpt4 key购买 nike

我正在开发一个使用 neo4j 的应用程序。我已经使用 CSV 文件在 neo4j 中导入了我的数据库并创建了节点和关系。我的数据库包含 3 列,Anumber、Bnumber 和 DateTime。此 DB 表示 ANUMBER -> BNUMBERDATETIME

的调用历史记录

所以我在 neo4j 浏览器上使用这些命令创建了节点和关系

LOAD CSV WITH HEADERS FROM "file:///2.csv" AS ROW
CREATE (a:ANUMBER {aNumber:ROW.aNumber} )
CREATE (b:BNUMBER {bNumber:ROW.bNumber} )
MERGE (a)-[:CALLED]->(b);

这成功创建了两个节点,一个关系和 2 个属性键。

现在我面临两个问题。

第一个 是当我查询与单个节点相关的数据时,它会为每次出现创建新的圆圈。我用过这个查询

MATCH p=(a:ANUMBER)-[r:CALLED]->(b:BNUMBER)
WHERE a.aNumber = "3217913664"
RETURN p

这会产生正确的响应,但它会为 3217913664 和任何其他数字之间的每个关系创建新的圆圈。请参阅所附图片。我需要为 3217913664 显示一个圆圈,所有边从单个圆圈出来并创建所需的圆圈和边。此图像显示 3217913664 的 23 个节点,但我只需要显示 3217913664 的一个节点和预期的其他节点。 enter image description here

第二个 是我需要显示两个数字之间的所有最短路径。让我们说

123 called 456,789,000,222
000 called 333,555,999
999 called 963
456 called 963
123 called 963

所以我需要找到123和963之间的所有最短路径,它们是:

123 -> 000 -> 999 -> 963
123 -> 456 -> 963
123 -> 963

知道如何解决这两个问题。我已经使用 GraphStream 实现了这些场景,但是我需要使用 Cypher 查询语言在 neo4j 中实现相同的用例

最佳答案

我相信您的第一个问题与导入脚本有关。您正在为 CSV 中的每一行创建 a 编号和 b 编号。这可能导致编号为 3217913664 的 23 个节点。要解决此问题,请将 CREATE 语句替换为 MERGE,如下所示:

LOAD CSV WITH HEADERS FROM "file:///2.csv" AS ROW
MERGE (a:ANUMBER {aNumber:ROW.aNumber} )
MERGE (b:BNUMBER {bNumber:ROW.bNumber} )
MERGE (a)-[:CALLED]->(b);

关于第二期:可能你正在寻找allShortestPath功能。

关于algorithm - 显示每个节点出现一次并使用 Dijkstra 算法在 neo4j 中找到最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45459725/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com