2017-08-02 77 views
1

我正在使用neo4j的应用程序。 我已经使用CSV文件在neo4j中导入了我的数据库并创建了节点和关系。我的数据库包含3列,Anumber,Bnumber和DateTime。该DB通过使用Neo4j的浏览器这些命令代表ANUMBER -> BNUMBERDATETIME使用Dijkstra算法在每个节点上显示一次发现并找到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显示一个圆,并且所有边从单个圆出发并创建所需的圆和边。这个图像显示了32个节点的3217913664,但我只需要为预期的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 

任何想法,我怎么能解决这些问题,2。我已经使用GraphStream实现了这些场景,但我需要在neo4j中使用Cypher查询语言实现相同的用例

回答

1

我相信你的第一个问题与导入脚本有关。您正在为CSV中的每一行创建a号码和b号码。也许这是导致用数字3217913664. 23个节点来解决这个MERGE更换CREATE语句,就像这样:

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功能。

+0

是的,我想'allShortestPath'。我试过这个,但它没有给出任何结果,可能是由于我的错误导入命令。我会尝试你的命令,看看会发生什么allShortestPath –

+0

我已经运行此查询的最短路径匹配(a:ANUMBER {aNumber:“3217913664”}),(b:BNUMBER {bNumber:“3212862749”}), 路径=最短路径((a) - [:CALLED *] - (b)) RETURN path' –

+0

但它在第一行给我**笛卡尔产品警告**并且**提供的模式在第二行无限制** 。任何想法如何解决此警告。结果良好而准确这两个警告 –

相关问题