首页 > 解决方案 > 在 Neo4j 中查找限制连接数的子图

问题描述

我需要在一个 <100 万的大型节点图上执行查询,对于给定的连接,我也想在它连接的节点上执行广度优先搜索,前提是 BFS 不会返回太多节点,否则我不想要任何返回。(我假设这些是已知的著名节点,并且彼此连接许多不同的子图。我用绿色和红色标记了我需要返回的节点和链接与我不需要的节点和链接。我猜这可能会成为APOC,但我有点迷茫。得到所有

部分子图

标签: neo4jneo4j-apoc

解决方案


假设您使用以下内容来识别利益关系:

MATCH (a:Foo)-[b:BAR]->(c:Foo)
WHERE b.id = 123

这是避免返回不需要的节点的一种方法(图表左侧或右侧的节点,如果有 5 个或更多):

MATCH (a:Foo)-[b:BAR]->(c:Foo)
WHERE b.id = 123
OPTIONAL MATCH (a)--(x)
WITH a, b, c, [z IN COLLECT(x) WHERE z <> c] AS xs
OPTIONAL MATCH (c)--(y)
WITH a, b, c, xs, [z IN COLLECT(y) WHERE z <> a] AS ys
RETURN a, b, c,
  CASE WHEN SIZE(xs) < 5 THEN xs ELSE [] END AS xs,
  CASE WHEN SIZE(ys) < 5 THEN ys ELSE [] END AS ys

推荐阅读