neo4j中的诱导子图

时间:2013-06-05 14:56:22

标签: java neo4j subgraph

我在neo4j中有一个图表,对于给定的节点N,我想找到在不超过N步长的路径中可到达的所有节点,以及该组节点之间的所有链接。对于Cypher或Traversal框架来说,这似乎是可能的;比另一个更受欢迎?我是用Java从嵌入式数据库做的,我需要对子图进行进一步的查询。我已经四处寻找并没有找到任何确凿的答案。

1 个答案:

答案 0 :(得分:2)

我认为cypher是获取所需数据,查询可变长度路径,收集和提炼的最简洁方法:

如果n是您的节点N的内部ID,而您的P是5:

START begin = node(n)             // or e.g. index lookup
MATCH p = (begin)<-[r*..5]-(end)  // match all paths of length up to 5
WITH distinct nodes(p) as nodes   // collect the nodes contained in the paths
MATCH (x)<-[r]-(y)                // find all relationships between nodes
WHERE x in nodes and y in nodes   // which were found earlier
RETURN distinct x,r,y             // and deduplicate as you find all pairs twice

这可能不是最有效的方式,但至少http://console.neo4j.org/中的执行计划说明表明在y in nodes之前考虑了MATCH (x)-[r]-(y)

我想不出办法避免两次关系匹配,因此返回语句中的distinct