我正在开发一个使用neo4j的应用程序。
我使用CSV文件在neo4j中导入了我的数据库,并创建了节点和关系。
我的数据库包含3列,Anumber,Bnumber和DateTime。此DB代表来自ANUMBER -> BNUMBER
DATETIME
所以我在neo4j Browser
上使用这些命令创建了节点和关系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);
这成功创建了两个节点,一个关系和两个属性键。
现在我面临两个问题。
第一个 是当我查询与单个节点相关的数据时它会为每次出现创建新的圆圈。我使用过这个查询
MATCH p=(a:ANUMBER)-[r:CALLED]->(b:BNUMBER)
WHERE a.aNumber = "3217913664"
RETURN p
这会产生正确的响应但是它为3217913664和任何其他数字之间的每个关系创建了新的圆圈。请参阅附图。我需要为3217913664显示一个圆,并且所有边都从单个圆出来并创建所需的圆和边。此图显示了3217913664的23个节点但是我只需要按预期显示3217913664和其他节点的一个节点。
第二个 是我需要显示两个数字之间的所有最短路径。让我们说
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中实现相同的用例
答案 0 :(得分:1)
我认为您的第一个问题与导入脚本有关。您正在为CSV中的每一行创建a
号码和b
号码。这可能导致23个节点的编号为3217913664.要解决此问题,请将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功能。