Neo4j Cypher查询:按输入路径查找节点

Neo4j Cypher查询:按输入路径查找节点,neo4j,cypher,Neo4j,Cypher,我有一个包含系统树层次结构的图。在此图中,一个根具有索引标签“MainRoot”,所有其他关系的类型为“hasParent”。 我想构造一个查询,将节点名称列表(=inputPath)作为输入,并在查询结束时返回节点 现在我有了这个工作示例,最后返回的项是我想要的名为“java”的指定节点(位于Root/src/main/java中): //输入 输入路径为[“Root”、“src”、“main”、“java”] //迭代器 展开范围(0,大小(输入路径)-2)与i相同 匹配(家长)这是我能想到

我有一个包含系统树层次结构的图。在此图中,一个根具有索引标签“MainRoot”,所有其他关系的类型为“hasParent”。 我想构造一个查询,将节点名称列表(=inputPath)作为输入,并在查询结束时返回节点

现在我有了这个工作示例,最后返回的项是我想要的名为“java”的指定节点(位于Root/src/main/java中):

//输入
输入路径为[“Root”、“src”、“main”、“java”]
//迭代器
展开范围(0,大小(输入路径)-2)与i相同

匹配(家长)这是我能想到的最短的方法

WITH ["Root", "src", "main", "java"] AS inputPath     
MATCH path=(mainRoot)<-[:hasParent*]-(child)
WHERE LENGTH(path) = SIZE(inputPath)-1
AND [n IN nodes(path) | n.name] = inputPath
RETURN path
以[“Root”、“src”、“main”、“java”]作为输入路径

MATCH path=(mainRoot)谢谢,这一步会打印出所需的结果,但是我认为它可能会对长inputPath产生性能问题,因为REDUCE步骤必然会到达depth inputPath-1的所有节点。我的意思是,这个算法会一直遍历到节点,例如“Root/docs/sth/html”,甚至它可能会意识到节点“Root/docs”不在路径中,因此它可能会跳过“docs”节点的整个子树。@Lukasmp3我完全同意。。也许有可能对此进行优化。但我想,让我们给好的老卢卡斯一些建议,这将进一步帮助他。当我有时间的时候,我会再看一看。我添加了另一种方法,可能表现更好。现在我看不出我可以避免REDUCE(),因为您必须确保以正确的顺序进行比较。我忽略了最简单的方法:)谢谢,这一个对我来说很好:)顺便问一下,这个(和[n in nodes(path)| n.name]=inputPath)命令到底是做什么的?我在密码文件中找不到或错过了它。。。
WITH ["Root", "src", "main", "java"] AS inputPath     
MATCH path=(mainRoot)<-[:hasParent*]-(child)
WHERE LENGTH(path) = SIZE(inputPath)-1
AND [n IN nodes(path) | n.name] = inputPath
RETURN path