Neo4j:如何查询图中节点的广度优先搜索

时间:2017-02-02 01:03:51

标签: neo4j cypher breadth-first-search

我在neo4j中有一个图模型,只有一个关系如下:

(node1)-[:CONNECTS]->(node2)

尝试了以下查询,但它会给我双向结果:

MATCH (n:Label1)-[r:CONNECTS*1..]-(m) 
WHERE n.name = 'startNodeString' 
RETURN n,r,m

以下查询将仅返回给定根节点的第一级子节点:

MATCH (cs:Label1)-[r:CONNECTS*]->(es:Label2)
WHERE cs.property = 'startNodeString'
RETURN cs,es,r

我想从通过每个子节点的根节点开始捕获并递归地每个子节点捕获直到每个级别的深度,即' n'水平。

通过密码查询感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您需要APOC Procedures,特别是path expander

以下是使用示例:

MATCH (cs:Label1)
WHERE cs.property = 'startNodeString'
CALL apoc.path.expandConfig(cs,{relationshipFilter:"CONNECTS>",maxLevel:3,uniqueness:"NODE_GLOBAL"}) YIELD path
WITH cs, RELATIONSHIPS(path) as r, LAST(NODES(path)) as es
WHERE es:Label2
RETURN cs,es,r

所有路径扩展器调用都默认使用bfs。 NODE_GLOBAL唯一性意味着节点只能遍历一次。您可以将maxLevel设置为您想要的任何深度限制,或者完全省略它。