Neo4j:获取查询节点之间的所有关系

Neo4j: get all relations between queried nodes

我想进行以下任务的密码查询:

  1. 有一个给定的起始节点,我想在2跳内得到所有相关节点
  2. 查询到的节点按跳数递增排序,并限制给定数量
  3. 并得到1的结果之间的所有关系。

我尝试了很多查询,并针对第 1 步、第 2 步进行了以下查询

MATCH path=((start {eid:12018})-[r:REAL_CALL*1..2]-(end))
WITH start, end, path
ORDER BY length(path) ASC
RETURN start, collect(distinct end)[..10]

但是当我尝试使用以下查询获取查询路径中的关系时,returns 路径中的所有关系:

MATCH path=((start {eid:12018})-[r:REAL_CALL*1..2]-(end))
WITH start, end, path
ORDER BY length(path) ASC
RETURN start, collect(distinct end)[..10], relationships(path)

我想我必须再次匹配第一次匹配的结果而不是直接从路径获取关系,但我所有的尝试都失败了。

如何获取查询节点之间的所有关系? 任何帮助赞赏,非常感谢。

[编辑]

类似这样的东西可能对你有用:

MATCH (start {eid:12018})-[rels:REAL_CALL*..2]-(end)
RETURN start, end, COLLECT(rels) AS rels_collection
ORDER BY
  REDUCE(s = 2, rs in rels_collection | CASE WHEN SIZE(rs) < s THEN SIZE(rs) ELSE s END)
LIMIT 10;

COLLECT aggregation function 将为每个不同的 start/end 对生成一个(关系集合的)集合。 LIMIT 子句基于 ORDER BY 子句将返回结果限制为前 10 个 start/end 对。 ORDER BY 子句使用 REDCUE 计算到给定 end 节点的每条路径的最小大小。