使用 Cypher 投影创建子图

Creating a subgraph using Cypher projection

我正在尝试使用 Cypher 投影创建我的图形的子图,因为我想使用 GDS 库。首先,我使用 Cypher 查询创建了一个非常好的子图。这是查询:

// Filter for only recurrent events
WITH [path=(m:IDHcodel)--(n:Tissue)
WHERE (m.node_category = 'molecular' AND n.event_class = 'Recurrence')
    AND NOT EXISTS((m)--(:Tissue{event_class:'Primary'})) | m] AS recur_events

// Obtain the sub-network with 2 or more patients in edges
MATCH p=(m1)-[r:hasIDHcodelPatients]->(m2) 
WHERE (m1 IN recur_events AND m2 IN recur_events AND r.total_common_patients >= 2)
WITH COLLECT(p) AS all_paths
WITH [p IN all_paths | nodes(p)] AS path_nodes, [p IN all_paths | relationships(p)]  AS path_rels
RETURN apoc.coll.toSet(apoc.coll.flatten(path_nodes)) AS subgraph_nodes, apoc.coll.flatten(path_rels) AS subgraph_rels

到目前为止一切顺利。现在我要做的就是通过在 GDS 创建查询中将子图节点和子图 rels 作为参数发送一个 Cypher 投影,这给了我一个空指针异常:

// All the above lines except using WITH instead of RETRUN in the last line. ie.,

...

WITH apoc.coll.toSet(apoc.coll.flatten(path_nodes)) AS subgraph_nodes, apoc.coll.flatten(path_rels) AS subgraph_rels

// Call gds library to create a graph by sending subgraph_nodes and subgraph_rels as parameters
CALL gds.graph.create.cypher(
    'example',
    'MATCH (n) where n in $sn RETURN id(n) as id',
    'MATCH ()-[r]-() where r in $sr RETURN r.start as source , r.end as target',
    {parameters: {sn: subgraph_nodes, sr: subgraph_rels} } 
) YIELD graphName AS graph, nodeQuery, nodeCount AS nodes, relationshipQuery, relationshipCount AS rels

RETURN graph

有什么问题吗?谢谢

要访问关系的开始和结束节点,您使用的语法略有不同:

WITH apoc.coll.toSet(apoc.coll.flatten(path_nodes)) AS subgraph_nodes, apoc.coll.flatten(path_rels) AS subgraph_rels

// Call gds library to create a graph by sending subgraph_nodes and subgraph_rels as parameters
CALL gds.graph.create.cypher(
    'example',
    'MATCH (n) where n in $sn RETURN id(n) as id',
    'MATCH ()-[r]-() where r in $sr RETURN id(startNode(r)) as source , id(endNode(r)) as target',
    {parameters: {sn: subgraph_nodes, sr: subgraph_rels} } 
) YIELD graphName AS graph, nodeQuery, nodeCount AS nodes, relationshipQuery, relationshipCount AS rels

RETURN graph

这是我注意到的,希望这是唯一的错误。