在Neo4j中搜索从所有节点到所有节点的匹配

时间:2015-03-10 14:51:26

标签: neo4j cypher

我有一组表示文件系统位置之间链接的节点。我可以加载所有节点,并且我试图通过查找每个节点中的目标和源目录之间的匹配来将它们链接在一起。

伪代码查询:

For all Interface nodes in Neo4j, 
search all other nodes for where other.sourcedir = this.destdir.  
If a match is found, create a SENDS_TO relationship from A to B.

天真的查询:     MATCH(a:接口),(b:接口)WHERE a.destdir == b.sourcedir MERGE(a) - [r:SENDS_TO] - >(b)

当我运行该查询时,Neo4j似乎进入了一个无限循环,我在10分钟后终止了它。

1 个答案:

答案 0 :(得分:3)

您可以尝试这样做:

MATCH (a:Interface)
with a
MATCH (b:Interface)
WHERE a.destdir == b.sourcedir and a <> b
MERGE (a)-[:SENDS_TO->(b);

这可能会表现得更好,但您运行的查询会将每个接口与每个其他接口进行比较。所以对我来说似乎是O(n ^ 2),如果你有80个庞大的节点,它会变慢。在运行此操作之前,您可能希望确保destdirsourcedir上存在索引。