我正在尝试从neo4j图获取邻接矩阵。该矩阵包含丰富的功能。这意味着,如果连接了两个节点,则将节点的类型(type是节点的字段)和边缘类型放入相应的单元格中。 这是一个示例矩阵:
[
[0, 'node_1_type : edge_type : node_2_type', 0],
...
]
这是我要尝试的密码查询。但是我不知道如何获取连接节点的edge_type。
MATCH (n)
WITH collect(n) AS Nodes
WITH [n IN Nodes |
[m IN Nodes |
CASE size((n)-[]->(m))
WHEN 0 THEN 0
ELSE n.type + ':' + 'edge-type ??' + ':' + m.type
END
]
] AS AdjacencyMatrix
RETURN AdjacencyMatrix;
请帮助您如何获取连接的节点之间的边线类型。
答案 0 :(得分:0)
由于邻接矩阵几乎是笛卡尔乘积,因此,我建议直接这样做。由于最终结果是笛卡尔积,因此在这种情况下避免使用它是没有好处的。
MATCH (a), (b) OPTIONAL MATCH (a)-[r]->(b)
WITH a,b,
CASE r
WHEN null THEN 0
ELSE a.type+":"+TYPE(r)+":"+b.type
END as edge
// collect rows into matrix
return a, edge, b
另一方面,如果由于某种原因您坚持要采用这种方式,那么您实际上可以使用模式匹配来提取信息(但是,由于强制Neo4j多次不必要地匹配所有内容,效率要低得多)< / p>
MATCH (a), (b)
WITH a,b,
CASE SIZE((a)-->(b))
WHEN 1 THEN a.type+":"+TYPE(RELATIONSHIPS((a)-->(b)[0])[0])+":"+b.type
ELSE 0
END as edge
// collect rows into matrix
return a, edge, b
这里的魔力显然是TYPE(RELATIONSHIPS((a)-->(b)[0])[0])
,所以这是它的工作方式,按照求值的顺序(部分以粗体显示)