首页 > 解决方案 > apoc.path.subgraphAll 不返回图表

问题描述

我正在尝试基于重复模式可视化图形,并且 apoc.path.subgraphAll 似乎是要使用的东西。

使用查询:

MATCH (av:Architecture_View {`view identifier`:'SV-01'})
//pattern is (Architecture_View)-[:SUPPLIES]->(Architecture_Description_Tuple)-[:`SUPPLIED TO`]->(Architecture_View)
CALL apoc.path.subgraphAll(av,{
beginSequenceAtStart: true,
sequence: "`SUPPLIES`>,Architecture_Description_Tuple,`SUPPLIED TO`>,Architecture_View"})
YIELD nodes, relationships
RETURN nodes, relationships;

我只是得到返回的开始节点(av)。不返回任何错误。

如果我只是手动运行一个查询来迭代这个模式一次

MATCH r=(av:Architecture_View {`view identifier`:'SV-01'})-[:SUPPLIES]-(adt:Architecture_Description_Tuple)-[:`SUPPLIED TO`]->(av2:Architecture_View)
RETURN r

我得到了预期的图表。

返回 apoc.path.subgraphAll 结果或序列定义的语句中的方式是否有问题?

标签: neo4jneo4j-apoc

解决方案


如果您指定beginSequenceAtStart,则您提供的序列模式必须包括起始节点。在您的情况下,起始模式从起始节点的第一个关系开始。

例如,给定以下测试数据:

MERGE (a: View { id: 1 })-[:SUPPLIES]->(b: DescriptionTuple { desc: 'description' })-[:SUPPLIED_TO]->(a2: View {id: 2 })

以下两个查询都将返回连接a到的子图a2——注意beginSequenceAtStart这两种情况下序列字符串的初始块是如何不同的:

// beginSequenceAtStart false, start with the first relationship type
MATCH (a: View { id: 1 })
CALL apoc.path.subgraphAll(a, {
  beginSequenceAtStart: false,
  sequence: "SUPPLIES>,DescriptionTuple,SUPPLIED_TO>,View"
})
YIELD nodes, relationships
RETURN nodes, relationships
// beginSequenceAtStart true, begin with the first node label
MATCH (a: View { id: 1 })
CALL apoc.path.subgraphAll(a, {
  beginSequenceAtStart: true,
  sequence: "View,SUPPLIES>,DescriptionTuple,SUPPLIED_TO>,View"
})
YIELD nodes, relationships
RETURN nodes, relationships

推荐阅读